基底類別和衍生類別有同名函數時,無論參數個數相同或不同,子類別物件直接呼叫的總是衍生類別的那個同名函數,如果要呼叫基底類別的同名函數,需要藉助基類指標或引用。如果現在想實作用同一個呼叫形式,既可以呼叫衍生類別的函數實作版本,也可以呼叫基底類別的實作版本,則要藉助虛函數
但是,老師說只有函數原型完全相同的才能宣告為虛函數啊,那麼對於形參數或類型不同的同名函數,如何實現上面的函數呢?
欧阳克2017-06-10 09:50:57
你可以這樣定義然後在子類別裡按需要重新定義:
class Base {
public:
virtual void print(int) = 0;
virtual void print(float) = 0;
};
這個問題的根本在於C++如何找到函數,它必須知道函數的名字和參數,所以你必須把這兩樣都定義清楚了,回傳值倒是可以模糊一些,例如copy函數在子類別裡可以回傳子類別。