多重繼承時,若多個基類別擁有同名函式(不論 public/private),派生類別直接呼叫會導致模糊錯誤。編譯器依最佳匹配規則,但無法決定時發生錯誤。
在派生類別明確指定作用域:BaseClass::func()。
/* test.cpp
* Created on: 2014.04.14
* Author: Spike
*/
#include <iostream>
#include <string>
using namespace std;
class BorrowableItem {
public:
void checkout() { cout << "BorrowableItem" << endl; }
};
class ElectronicGadget {
private:
bool checkout() const { return true; }
};
class MP3Player : public BorrowableItem, public ElectronicGadget {};
int main() {
MP3Player mp;
mp.BorrowableItem::checkout(); // 必須指定作用域
return 0;
}
BorrowableItem