我有3节课:A
, B
, and AnotherClass
. Where B
源自A
:
class A {
public:
A(){}
virtual void method() {//default action}
};
然后我有一个派生类 B:
class B : public A {
public:
B(){}
void method() {//redefine action}
};
And 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
, and AnotherClass
接受一个对象A
,我能够成功通过B
对象作为参数。
我打电话说:
myObj.anotherMethod();
我希望这个执行anotherMethod()
,当它发生时,我希望它调用 REDEFINEDmethod()
属于B
,而是调用默认值method()
定义于A
我在想我的问题是因为我指定了参数AnotherClass
作为一个对象class A
。但是,我不想将此参数更改为对象class B
因为我也有课C
, D
, and E
,也直接继承自A
。所以我想使用基类作为参数类型,这样我就不仅限于只能传入一个b
目的。但是,我在该网站上阅读了一些较旧的帖子,大多数建议的解决方案是传递派生对象(b
)通过参考,我正在做的。
有人可以解释为什么会发生这种情况吗?