繼承與派生定義及相關(guān)程序調(diào)用舉例

一、面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn):抽象,封裝,繼承,多態(tài)性。

10年積累的成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有宜賓免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

二、3種成員訪問限定符及其繼承關(guān)系:

繼承與派生定義及相關(guān)程序調(diào)用舉例 

問題:

private/protected限定符都是限定直接訪問,那他們之間有什么區(qū)別?

解答:在本類中,private和protected作用是相同的,但是protected可以被繼承,而private卻不能。

三種繼承關(guān)系下基類成員的在派生類的訪問關(guān)系變化如下表所示:

繼承與派生定義及相關(guān)程序調(diào)用舉例 

總結(jié):

1.基類的私有成員在派生類中是不能被訪問的,如果一些基類成員不想被基類對象直接訪問,但需要在派生類中能訪問,就定義為保護(hù)成員??梢钥闯霰Wo(hù)成員限定符是因繼承才出現(xiàn)的。

2.public繼承是一個(gè)接口繼承,每個(gè)父類可用的成員對子類也可用,因?yàn)槊總€(gè)子類對象也都是一個(gè)父類對象。

3.protetced/private繼承是一個(gè)實(shí)現(xiàn)繼承,基類的部分成員并未完全成為子類接口的一部分,所以非特殊情況下不會(huì)使用這兩種繼承關(guān)系,在絕大多數(shù)的場景下使用的都是公有繼承。

4.不管是哪種繼承方式,在派生類內(nèi)部都可以訪問基類的公有成員和保護(hù)成員,但是基類的私有成員存在但是在子類中不可見(不能訪問)。

5.使用關(guān)鍵字class時(shí)默認(rèn)的繼承方式是private,使用struct時(shí)默認(rèn)的繼承方式是public,不過最好顯示的寫出繼承方式,在實(shí)際運(yùn)用中一般使用都是public繼承,極少場景下才會(huì)使用protetced/private繼承.

三、繼承和派生相關(guān)定義舉例

類的繼承:一個(gè)新類從已有的類那里獲得其已有特性。

類的派生:從已有的類(父類)產(chǎn)生一個(gè)新的子類。

派生類是基類的具體化,基類是派生類的抽象。

繼承的3種分類:

單繼承:一個(gè)派生類只從一個(gè)基類派生。

多繼承:一個(gè)派生類有兩個(gè)或多個(gè)基類。

 繼承與派生定義及相關(guān)程序調(diào)用舉例 

菱形繼承:

繼承與派生定義及相關(guān)程序調(diào)用舉例 

聲明派生類的一般形式:

class 派生類名:[繼承方式] 基類名

{

    派生類新增加的成員

}

例1.用公用繼承方式,在程序中包括輸入數(shù)據(jù)的函數(shù),運(yùn)行程序輸入num,name,sex,age,addr的值,輸出以上5個(gè)數(shù)據(jù)的值。

解:程序:

#include<iostream>

using namespace std;

class Student

{

public:

void get_value()//輸入基類的3個(gè)私有成員的值

{

cin >> num >> name >> sex;

}

void display()//輸出基類的3個(gè)私有成員的值

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

}

private:

int num;

char name[10];

char sex;

};

class Student1:public Student//定義公用派生類Student1

{

public:

void get_value_1()//函數(shù)的作用是輸入5個(gè)數(shù)據(jù)成員的值

{

get_value();//調(diào)用函數(shù),輸入基類的3個(gè)私有數(shù)據(jù)成員的值

cin >> age >> addr;//輸入派生類的兩個(gè)私有數(shù)據(jù)成員的值

}

void display_1()//輸出派生類的2個(gè)私有數(shù)據(jù)成員的值

{

cout << "age:" << age << endl;

cout << "address:" << addr << endl;

}

private:

int age;

char addr[30];

};

int main()

{

Student1 stud1;//定義公用派生類Student1的對象stud1

stud1.get_value_1();//輸入5個(gè)數(shù)據(jù)

stud1.display();//輸出基類的3個(gè)私有數(shù)據(jù)成員的值

stud1.display_1();//輸出派生類2個(gè)私有數(shù)據(jù)成員的值

system("pause");

return 0;

}

結(jié)果:

1111 yao M 20 xi'an

num:1111

name:yao

sex:M

age:20

address:xi'an

請按任意鍵繼續(xù). . .

例2.用私有繼承方式,在程序中包括輸入數(shù)據(jù)的函數(shù),運(yùn)行程序輸入num,name,sex,age,addr的值,輸出以上5個(gè)數(shù)據(jù)的值。

解:程序:

#include<iostream>

using namespace std;

class Student

{

public:

void get_value()

{

cin >> num >> name >> sex;

}

void display()

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

}

private:

int num;

char name[10];

char sex;

};

class Student1:private Student//定義私有派生類Student1

{

public:

void get_value_1()

{

get_value();

cin >> age >> addr;

}

void display_1()

{

display();

cout << "age:" << age << endl;

cout << "address:" << addr << endl;

}

private:

int age;

char addr[30];

};

int main()

{

Student1 stud1;

stud1.get_value_1();

stud1.display_1();//只需調(diào)用一次stud1.display_1()

system("pause");

return 0;

}

結(jié)果:

1111 yao M 20 xi'an

num:1111

name:yao

sex:M

age:20

address:xi'an

請按任意鍵繼續(xù). . .

例3.用保護(hù)繼承方式,在程序中包括輸入數(shù)據(jù)的函數(shù),運(yùn)行程序輸入num,name,sex,age,addr的值,輸出以上5個(gè)數(shù)據(jù)的值。

解:程序:

#include<iostream>

using namespace std;

class Student//聲明基類

{

public://基類公用成員

void get_value();

void display();

protected://基類保護(hù)成員

int num;

char name[10];

char sex;

};

void Student::get_value()

{

cin >> num >> name >> sex;

}

void Student::display()

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

}

class Student1:protected Student//聲明一個(gè)保護(hù)派生類Student1

{

public:

void get_value_1();

void display_1();

private:

int age;

char addr[30];

};

void Student1::get_value_1()

{

get_value();

cin >> age >> addr;

}

void Student1::display_1()

{

cout << "num:" << num << endl;

cout << "name:" << name << endl;

cout << "sex:" << sex << endl;

cout << "age:" << age << endl;

cout << "address:" << addr << endl;

}

int main()

{

Student1 stud1;

stud1.get_value_1();

stud1.display_1();

system("pause");

return 0;

}

結(jié)果:

1111 yao M 20 xi'an

num:1111

name:yao

sex:M

age:20

address:xi'an

請按任意鍵繼續(xù). . .

四、繼承與轉(zhuǎn)換--賦值兼容規(guī)則:

1.子類對象可以賦值給父類對象,父類對象不能賦值給子類對象;

2.父類的指針/引用可以指向子類對象,子類的指針/引用不能指向父類對象(可以通過強(qiáng)制類型轉(zhuǎn)換完成)

五、繼承體系中的作用域:

1.在繼承體系中基類和派生類都有獨(dú)立的作用域。

2.子類和父類中有同名成員,子類成員將屏蔽父類對成員的直接訪問。(在子類成員函數(shù)中,可以使用 基類::基類成員 訪問)--隱藏

注意:在實(shí)際中在繼承體系里面最好不要定義同名的成員。

六、派生類的6個(gè)默認(rèn)成員函數(shù)

繼承與派生定義及相關(guān)程序調(diào)用舉例

網(wǎng)站欄目:繼承與派生定義及相關(guān)程序調(diào)用舉例
文章轉(zhuǎn)載:http://m.kartarina.com/article32/jeshpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)、網(wǎng)站建設(shè)、App開發(fā)、標(biāo)簽優(yōu)化、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
主站蜘蛛池模板: 无码av免费毛片一区二区| 中文字幕无码乱码人妻系列蜜桃 | 无码毛片一区二区三区中文字幕 | 亚洲成av人片在线观看天堂无码| 国产成人无码精品久久久露脸| 免费无码一区二区三区蜜桃| 亚洲看片无码在线视频| 日产无码1区2区在线观看 | 最新无码人妻在线不卡| 四虎影视无码永久免费| 无码人妻精品一区二区蜜桃 | 丰满亚洲大尺度无码无码专线| 在线精品自拍无码| 久久亚洲精品无码av| 欧洲人妻丰满av无码久久不卡 | 精品无码成人网站久久久久久 | 免费A级毛片无码无遮挡内射| 嫩草影院无码av| 无码熟妇αⅴ人妻又粗又大| 午夜人性色福利无码视频在线观看 | 亚洲国产91精品无码专区| 无码夫の前で人妻を犯す中字 | av无码久久久久久不卡网站| 中文字幕乱码人妻无码久久| 国产精品无码制服丝袜| 精品无码综合一区二区三区| 亚洲最大无码中文字幕| 97性无码区免费| 久久久久久亚洲Av无码精品专口| 最新中文字幕AV无码不卡| 亚洲AV无码乱码在线观看牲色| 加勒比无码一区二区三区| 无码无套少妇毛多18PXXXX| 亚洲AV色无码乱码在线观看| 亚洲熟妇av午夜无码不卡| 日韩av无码国产精品| 亚洲av永久无码精品秋霞电影秋| 亚洲精品无码mⅴ在线观看| 一本色道久久综合无码人妻 | 国产午夜无码专区喷水| 中文字字幕在线中文无码|