我有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