多重繼承時,若多個基類別擁有同名成員函式,派生類別直接呼叫會導致編譯錯誤: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; 可將基類別函式引入派生類別作用域,但若多個基類別同名仍需手動消歧義。