成員訪問屬性:
1. 1.
不可訪問
2. 2.私有
3. 3.保護
4. 4.公有
一.基類與派生類有同名成員:(二義性問題)
一般說來,在派生類中對基類成員的訪問應該是唯一的,但是,由於多繼承情況下,可能造成對基類中某成員的訪問出現了不唯一的情況,則稱為對基類成員訪問的二義性問題。
用「物件名.成員名
」「物件指標->成員名
」的方式先訪問派生類的,如果派生類沒有新增與基類的同名成員,此時基類有多個同名成員,則系統無法判斷該呼叫哪個成員.如果訪問基類的資料成員則要用到這樣的方法:「派生類物件.基類::同名成員」或 「派生類物件->基類::同名成員」。
此外在派生類的宣告時,還可以用using關鍵字加以澄清,避免二義性問題。
class derived:public base1,public base2 ;
int main()
二.虛基類:
將共同的基類設定為虛基類,這時候從不同路徑繼承過來的同名資料成員就只有乙個副本,同乙個函式名也只有乙個對映。
c有四個基類
b1b2b3為直接基類,b0為最遠基類
虛基類在派生類的定義過程中宣告,語法形式為:
class
派生類名:virtual 繼承方式 基類名
三.虛基類及派生類的建構函式
1.必須包含所有的資料成員(包括不可見)
2.呼叫基類建構函式來初始化基類成員,可呼叫多個基類建構函式。(注意順序)
在多繼承的情況下,派生類的建構函式格式如下:
派生類(總引數):基類名1>(參數列1>),基類名2>(參數列2>),…
子物件(參數列n+1>),…
其中,總引數中各個引數包含了其後的各個分參數列。
class base0
int var0;
void fun0(){}
};class base1:virtual public base0//
初始化base0的成員
int var;
};class base2:virtual public base0 //
初始化base0的成員
int var; }
class derived : public base1,public base2 //
初始化base0的成員
int var;
void fun(){}
} int main()
建立d物件的時候,通過其建構函式初始化列表,因為derived為最遠派生類,虛基類煩人成員則有最遠派生類的構造函式呼叫虛基類的建構函式進行初始化,改派生類的其他基類(base1,base2
)對虛基類的構造函式呼叫被自動忽略。
C 派生類的成員標識與訪問
成員訪問屬性 1.1.不可訪問 2.2.私有3.3.保護4.4.公有一 基類與派生類有同名成員 二義性問題 一般說來,在派生類中對基類成員的訪問應該是唯一的,但是,由於多繼承情況下,可能造成對基類中某成員的訪問出現了不唯一的情況,則稱為對基類成員訪問的二義性問題。用 物件名.成員名 物件指標 成員名...
C 派生類成員的訪問屬性
c 繼承方式總共分為以下幾種 public private protected三種 它們直接影響到派生類的成員 及其物件對基類成員訪問的規則 1 public 公有繼承 繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public protected成...
8 3 多重繼承與派生類成員標識
由多個基類共同派生出派生類的繼承結構稱為 多重繼承 或多繼承 multiple inheritance 多重繼承是從實際的需要產生的。例如 從大學在冊人員產生學生和教職工。再從學生派生研究生。如果考慮到研究生可以當助教,那麼他們又有了教職工的特性。教職工可分為教師和行政人員,但行政人員也可以去授課,...