對不起,如果這個答案已經在這個網站上,但我已經找遍了,找不到解決我的問題。它適用於來自繼承類的同名函數。這裏是我的代碼:具有相同函數名稱的C++繼承
class A
{
public:
int foo(int c) { c = c+1; return c; };
};
class B : public A
{
public:
int foo(int c) { c = c-1; return c; };
};
int main()
{
A array[2];
array[0] = A item1;
array[1] = B item2;
for (int n=0;n<2;n++)
{
cout << array[n].foo(10) << endl;
}
return 0;
}
我期望的輸出:
11 // foo() from A class [10 + 1 = 11]
9 // foo() from B class [10 - 1 = 9 ]
而是我得到
11
11
從測試了這一點,我發現,把foo() B類中的函數不會在for循環中調用。而是調用A類中的foo()函數,即使在array [1]上的B對象上也是如此。
這是因爲我已經將數組定義爲僅包含A類的對象?如果是這樣,有沒有辦法讓我可以從B類的foo()函數調用該for-loop中的第二個對象?
非常感謝您的幫助!
三個詞:對象切片,'虛擬'。 – chris
您正在存儲一個'A'類型的數組,所以如果B包含額外的成員,則'B'將被切片爲'A',並且您僅限於調用'A'的mebers。 – Joe
'array [0] = item1;'不是任何一種C++。 –