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

C++ 多重繼承中的名稱模糊與解決

     編輯:關於C++

問題

多重繼承時,若多個基類別擁有同名成員函式,派生類別直接呼叫會導致編譯錯誤:request for member 'xxx' is ambiguous。

解決方法

在派生類別中重寫該函式,並以作用域解析運算子明確指定呼叫哪個基類別版本(如 Base1::print())。

程式碼示範

/* cppprimer.cpp
 * Created on: 2014.1.10
 * Author: Spike
 */
#include <iostream>
#include <string>

struct Base1 {
    void print() { cout << "Base 1" << endl; }
};
struct Base2 {
    void print() { cout << "Base 2" << endl; }
};
struct Derived1 : public Base1, public Base2 {
    void print() {
        Base1::print();
        Base2::print();
    }
};

int main() {
    Derived1 d1;
    d1.print(); // 輸出 Base 1 後接 Base 2
}

輸出結果

Base 1
Base 2

補充

  • 若基類別函式為虛擬函式,派生類別覆寫後仍可透過基類別指標正確動態綁定。
  • 使用 using Base1::print; 可將基類別函式引入派生類別作用域,但若多個基類別同名仍需手動消歧義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved