首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 多重繼承名稱模糊與虛擬函式覆寫

     編輯:關於C++

現象

多重繼承時,若多個基類別擁有同名函式(不論 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

補充

  • 若基類別函式為虛擬函式,派生類別覆寫後可透過基類別指標正確動態綁定,不發生模糊。
  • 私有繼承的基類別同名函式同樣參與名稱查找,導致模糊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved