我认为我对对象感到困惑,以及在扩展对象时会发生什么。
我的目标是通过扩展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)
不应该这样吗?
答案 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