Я думаю, что я действительно немного запутался в объектах и ​​в том, что происходит, когда вы расширяете объект.

Моя цель здесь - создать B (), расширив A ()), чтобы получить все функции A () и т.д., но сделать B () полностью самодостаточным в создании самого себя и т.д.

B (), когда экземпляр создается из какого-то места, в конечном итоге настраивает свой цвет, размер, настраивает свое положение и т.д., чтобы я мог сделать что-то вроде:

B::B *b = new B:B(something in);
this -> addChild(b, 1);

Итак, когда this-> addChild () он затем добавляет, и все работает, как я установил в B ()

Против:

B::B *b = new B:B(something in);
b->setPosition();
b->setColor();
...
this -> addChild(b, 1);

В инкапсуляции и наследовании?

ОБНОВЛЕНИЕ: Я думаю, что меня смущает то, что если:

class A : public Z {

}

class b : public Z {

}

В:

B::B *b = new B::B()
this-> addChild(b,1)

Разве это не должно работать?

-1
Jasmine 6 Май 2013 в 20:11
Где в вашем коде находится A? (это?)
 – 
Trax
6 Май 2013 в 20:12

1 ответ

Лучший ответ

Вы не расширяете, а составляете композицию.

Если вы хотите расширить класс B из A (чтобы вы получили все защищенные и общедоступные методы в A), вам необходимо определить B следующим образом:

class B : public A { ... }

Если вы хотите, чтобы A было внутри B, вы должны просто прояснить ситуацию для читателя. Оба варианта не имеют значения, если не ясно. В вашем случае я бы предпочел первый, поскольку addChild кажется всего лишь одной операцией.

РЕДАКТИРОВАТЬ: Хорошо, после вашего редактирования да, он должен работать. Но нет необходимости помещать B :: B, если B не находится внутри пространства имен B. Просто вызовите new B (), new A ():

A *a = new A(..);

Некоторые URI: - Предпочитать композицию наследованию? - http://en.wikipedia.org/wiki/Composition_over_inheritance

1
Community 23 Май 2017 в 13:32
Я только что сделал обновление и сделаю второе с очень конкретным кодом
 – 
Jasmine
6 Май 2013 в 20:25
На самом деле я пытаюсь понять, какой концепции мне не хватает, поэтому вчера я задал этот вопрос: stackoverflow.com/questions/16391953/…
 – 
Jasmine
6 Май 2013 в 20:29
Я не совсем уверен, что понимаю вас, но похоже, что вам все еще нужна дополнительная информация о композиции и наследовании - двух общих способах «расширения» объекта. Проверьте URI, которые я оставил в своем ответе.
 – 
Trax
6 Май 2013 в 21:01
Спасибо, они выглядят полезными.
 – 
Jasmine
6 Май 2013 в 21:12