在我的代碼,我有這些類實現:C++:調用從父實例子方法
class A
{
public:
virtual int fun() { return 0; }
}
class B : public A
{
public:
virtual int fun() { return 1; }
}
而這些功能:
void operation(A a)
{
printf("%d\n",a.fun());
}
int main()
{
B b;
operation(b);
return 0;
}
正如你所看到的,B類繼承A,並實現了虛擬繼承方法fun()
。主類調用一個函數,該函數在參數中使用A並使用參數中的B對象調用fun()
方法。
在執行過程中,我期望打印字符串"1"
,但它是"0"
(即使它是傳遞給operation()
的B對象)。
我需要這樣做,因爲我有幾個B類(B1,B2等......),我希望功能operation()
是通用的。 我不需要在類A中實現operation()
,但是如果我聲明operation()
純虛擬,編譯失敗operation()
說我不能實例化A(這是相當期望的)。
我發現了很多關於父/子方法調用和繼承的話題,但他們都沒有精確地討論過這個問題。
有人可以幫助我嗎?
謝謝。
小心:對於對象的默認構造,不得使用括號。 'B b()'不會調用'B'的默認c'tor,但是聲明一個函數'b',它不接受任何參數並返回一個類'B'的對象。 –
這只是我編寫這個簡化的代碼示例時所犯的一個錯誤 – Vultrao