C ++创建一个自足的对象,扩展另一个类

时间:2013-05-06 16:11:02

标签: c++ object inheritance instantiation encapsulation

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

我的目标是通过扩展A()来创建B(),以便获得A()的所有函数等,但使B()完全自我创建自己等等。

B(),当从某个地方实例化时,最终会设置其颜色,调整自身大小,设置其位置等,以便我可以执行以下操作:

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

所以,当这个 - > 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 {

}

在A:

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

不应该这样吗?

1 个答案:

答案 0 :(得分:1)

你没有扩展,而是制作作品。

如果你想从A扩展B类(这样你得到A中的所有受保护和公共方法)你需要按如下方式定义B:

class B : public A { ... }

如果你想在B里面包含A,那么你应该向读者说清楚。除非不清楚,否则两种选择都无关紧要。在你的情况下,我更喜欢第一个,因为addChild似乎只是一个操作。

编辑:好的,在您编辑之后,它应该可以正常工作。但是除非B在B名称空间内,否则不需要放置B :: B.只需调用新的B(),新的A():

A *a = new A(..);

一些URI: - Prefer composition over inheritance? - http://en.wikipedia.org/wiki/Composition_over_inheritance