c++之訪問從基類繼承的成員
阿新 • • 發佈:2019-01-31
1當派生類與基類中有相同成員時:若沒有特別限定,則通過派生類物件使用的是派生類的同名成員。如果要通過派生類物件訪問基類中被隱藏的同名成員,應使用基類名和作用域操作符“::”來限定
2如果從不同基類中繼承了同名成員,但在派生類中沒有定義同名成員,“派生類物件或引用.成員名”、“派生類指標—>成員名”訪問成員存在二義性問題。
#include <iostream> using namespace std; class Base1 { public: int var; void fun() { cout << "Member of Base1" << endl; } }; class Base2 { public: int var; void fun() { cout << "Member of Base2" << endl; } }; class Derived: public Base1, public Base2 { public: int var; void fun() { cout << "Member of Derived" << endl; } }; int main() { Derived d; Derived *p = &d; //訪問Derived類成員 d.var = 1; d.fun(); //訪問Base1基類成員 d.Base1::var = 2; d.Base1::fun(); //訪問Base2基類成員 p->Base2::var = 3; p->Base2::fun(); return 0; }
2如果從不同基類中繼承了同名成員,但在派生類中沒有定義同名成員,“派生類物件或引用.成員名”、“派生類指標—>成員名”訪問成員存在二義性問題。
參考:程式參考清華大學鄭莉《C++程式語言設計》//7_7.cpp #include <iostream> using namespace std; class Base0 { //定義基類Base0 public: int var0; void fun0() { cout << "Member of Base0" << endl; } }; class Base1: public Base0 { //定義派生類Base1 public: //新增外部介面 int var1; }; class Base2: public Base0 { //定義派生類Base2 public: //新增外部介面 int var2; }; 例7-7 多繼承時的二義性和冗餘問題 class Derived: public Base1, public Base2 { public: int var; void fun() { cout << "Member of Derived" << endl; } }; int main() { //程式主函式 Derived d; d.Base1::var0 = 2; d.Base1::fun0(); d.Base2::var0 = 3; d.Base2::fun0(); return 0; }