詳解C 程式設計中多級派生時的建構函式和訪問屬性

2022-10-04 02:09:09 字數 1939 閱讀 5234

c++多層派生時的建構函式vmceo

乙個類不僅可以派生出乙個派生類,派生類還可以繼續派生,形成派生的層次結構。在上面敘述的基礎上,不難寫出在多級派生情況下派生類的建構函式。

通過例下面的程式,讀者可以了解在多級派生情況下怎樣定義派生類的建構函式。相信大家完全可以自己看懂這個程式。

[例] 多級派生情況下派生類的建構函式。

#include

#include

using namespace std;

class student//宣告基類

void display( )//輸出基類資料成員

;class student2:public student1 //宣告間接公用派生類student2

void show_all( ) //輸出全部資料成員

執行時的輸出如下:

num:10010

name:li

age:17

score:89

請注意基類和兩個派生類的建構函式的寫法。

基類的建構函式首部:

student(int n, string nam)

派生類student1的建構函式首部:

student1(int n, string nam],int a):student(n,nam)

派生類student2的建構函式首部:

student2(in n, string nam,int a,int s):student1(n,nam,a)

注意不要寫成:

student2(int n, string nam,int a,int s):student1(n,nam),student1(n, nam, a)

不要列出每一層派生類的建構函式,只需寫出其上一層派生類(即它的直接基類)的建構函式即可。在宣告student2類物件時,呼叫student2建構函式;在執行student2建構函式時,先呼叫student1建構函式;在執行student1建構函式時,先呼叫基類student建構函式。初始化的順序是:

先初始化基類的資料成員num和name。

再初始化student1的資料成員age。

最後再初始化student2的資料成員score。

c++類多級派生時的訪問屬性

在實際專案開發中,經常會有多級派生的情況。如圖11.9所示的派生關係:類a為基類,類b是類a 的派生類,類c是類b的派生類,則類c也是類a的派生類;類b稱為類a 的直接派生類,類c稱為類a的間接派生類;類a是類b的直接基類,是類 c的間接基類。

在多級派生的情況下,各成員的訪問屬性仍按以上原則確定。

為了把多重繼承說的更加詳細,請大家先看下面的幾個繼承的類。

[例] 如果宣告了以下的類:

class a //基類

;class b: public a //public方式

;class c: protected b //protected方式

;類a是類b的公用基類,類b是類c的保護基類。各成員在不同類中的訪問屬性如下:

根據以上分析,在派生類c的外面只能訪問類c的成員函式f5,不能訪問其他成員。 派生類c的成員函式f5能訪問基類a的成員i、f2、j和派生類b的成員f3、f4。派生類b 的成員函式f3、f4能訪問基類a的成員i、f2和j。

通過以上分析,可以看到:無論哪一種繼承方式,在派生類中是不能訪問基類的私有成員的,私有成員只能被本類的成員函式所訪問,畢竟派生類與基類不是同乙個類。

如果在多級派生時都採用公用繼承方式,那麼直到最後一級派生類都能訪問基類的公用成員和保護成員。

如果採用私有繼承方式,經過若干次派生之後,基類的所有的成員已經變成不可訪問的了。

如果採用保護繼承方式,在派生類外是無法訪問派生類中的任何成員的。

而且經過多次派生後,人們很難清楚地記住哪些成員可以訪問,哪些成員不能訪問,很容易出錯。因此,在實際中,常用的是公用繼承。

本文標題: 詳解c++程式設計中多級派生時的建構函式和訪問屬性

本文位址:

C 多層派生時的建構函式順序問題

在派生類物件的建立過程中,首先是虛基類的建構函式被呼叫,並按照他們宣告的順序來構造,第二批是非虛基類的建構函式按他們的宣告順序呼叫,第三批是成員物件的構造函式呼叫,最後是派生自己的建構函式被呼叫。乙個類不僅可以派生出乙個派生類,派生類還可以繼續派生,形成派生的層次結構。在上面敘述的基礎上,不難寫出在...

C 基類和派生類的建構函式(詳解)

基類的成員函式可以被繼承,可以通過派生類的物件訪問,但這僅僅指的是普通的成員函式,類的建構函式不能被繼承。建構函式不能被繼承是有道理的,因為即使繼承了,它的名字和派生類的名字也不一樣,不能成為派生類的建構函式,當然更不能成為普通的成員函式。在設計派生類時,對繼承過來的成員變數的初始化工作也要由派生類...

解析C 中多層派生時的建構函式及一些特殊形式

c 多層派生時的建構函式 乙個類不僅可以派生出乙個派生類,派生類還可以繼續派生,形成派生的層次結構。在上面敘述的基礎上,不難寫出在多級派生情況下派生類的建構函式。通過例下面的程式,讀者可以了解在多級派生情況下怎樣定義派生類的建構函式。相信大家完全可以自己看懂這個程式。例 多級派生情況下派生類的建構函...