我有3个类:A
,B
和AnotherClass
。凡B
从A
得出:基类方法被调用而不是派生,即使通过引用传递
class A {
public:
A(){}
virtual void method() {//default action}
};
然后,我有一个派生类,B:
class B : public A {
public:
B(){}
void method() {//redefine action}
};
而且AnotherClass
:
class AnotherClass {
public:
AnotherClass(A& a);
A a;
anotherMethod(){ a.method()}
};
AnotherClass :: AnotherClass(A& a) : a(a) //initialization
所以,如果我构建与AnotherClass
对象B
的一个对象:
B b();
AnotherClass myObj(b);
请记住,由于B
继承自A
,并且AnotherClass
接受A
的对象,因此我能够成功传入B
对象作为参数。
我呼吁:
myObj.anotherMethod();
我希望这个执行anotherMethod()
,当它发生了,我希望它来调用属于B
重新定义method()
,而是它调用A
定义的默认method()
我在想我的问题是因为我指定了AnotherClass
作为class A
的一个对象的参数。但是,我不想将此参数更改为class B
的对象,因为我也有类C
,D
和E
,它们也直接从A
继承。所以我想使用基类作为参数类型,所以我不仅仅限于能够传递一个b
对象。但是,我在本网站上阅读了一些较旧的帖子,大多数提议的解决方案是通过引用传递派生对象(b
),我正在这样做。
有人可以解释为什么会发生这种情况吗?
*我想我的问题是因为我指定AnotherClass的参数为A类的一个对象*你是对的,你需要在类中存储一个引用或者指向'A'的指针 – NathanOliver
我编辑过它,但不是这样:'B b();' - 你的代码甚至编译? – Ajay