-1

我认为我对对象以及扩展对象时会发生什么感到有些困惑。

我的目标是通过扩展 A() 来创建 B() ,以便获得 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)

这不应该工作吗?

4

1 回答 1

1

你不是在扩展,而是在做一个组合。

如果您想从 A 扩展类 B(以便获得 A 中的所有受保护和公共方法),您需要按如下方式定义 B:

class B : public A { ... }

如果你想在 B 中包含 A,那么你应该让读者明白。除非不清楚,否则您的两种选择都没有关系。在您的情况下,我更喜欢第一个,因为 addChild 似乎只是一个操作。

编辑:好的,在您编辑之后,它应该可以工作。但除非 B 在 B 命名空间内,否则无需放置 B::B。只需调用 new B(), new A():

A *a = new A(..);

一些 URI: -更喜欢组合而不是继承? - http://en.wikipedia.org/wiki/Composition_over_inheritance

于 2013-05-06T16:23:08.540 回答