一、面向對象程序設計的特點:抽象,封裝,繼承,多態(tài)性。
創(chuàng)新互聯(lián)公司網(wǎng)站建設服務商,為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設服務,網(wǎng)站設計,網(wǎng)站托管運營等一站式綜合服務型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出創(chuàng)新互聯(lián)公司。二、3種成員訪問限定符及其繼承關系:
問題:
private/protected限定符都是限定直接訪問,那他們之間有什么區(qū)別?
解答:在本類中,private和protected作用是相同的,但是protected可以被繼承,而private卻不能。
三種繼承關系下基類成員的在派生類的訪問關系變化如下表所示:
總結:
1.基類的私有成員在派生類中是不能被訪問的,如果一些基類成員不想被基類對象直接訪問,但需要在派生類中能訪問,就定義為保護成員。可以看出保護成員限定符是因繼承才出現(xiàn)的。
2.public繼承是一個接口繼承,每個父類可用的成員對子類也可用,因為每個子類對象也都是一個父類對象。
3.protetced/private繼承是一個實現(xiàn)繼承,基類的部分成員并未完全成為子類接口的一部分,所以非特殊情況下不會使用這兩種繼承關系,在絕大多數(shù)的場景下使用的都是公有繼承。
4.不管是哪種繼承方式,在派生類內(nèi)部都可以訪問基類的公有成員和保護成員,但是基類的私有成員存在但是在子類中不可見(不能訪問)。
5.使用關鍵字class時默認的繼承方式是private,使用struct時默認的繼承方式是public,不過最好顯示的寫出繼承方式,在實際運用中一般使用都是public繼承,極少場景下才會使用protetced/private繼承.
三、繼承和派生相關定義舉例
類的繼承:一個新類從已有的類那里獲得其已有特性。
類的派生:從已有的類(父類)產(chǎn)生一個新的子類。
派生類是基類的具體化,基類是派生類的抽象。
繼承的3種分類:
單繼承:一個派生類只從一個基類派生。
多繼承:一個派生類有兩個或多個基類。
菱形繼承:
聲明派生類的一般形式:
class 派生類名:[繼承方式] 基類名
{
派生類新增加的成員
}
例1.用公用繼承方式,在程序中包括輸入數(shù)據(jù)的函數(shù),運行程序輸入num,name,sex,age,addr的值,輸出以上5個數(shù)據(jù)的值。
解:程序:
#include<iostream>
using namespace std;
class Student
{
public:
void get_value()//輸入基類的3個私有成員的值
{
cin >> num >> name >> sex;
}
void display()//輸出基類的3個私有成員的值
{
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個數(shù)據(jù)成員的值
{
get_value();//調(diào)用函數(shù),輸入基類的3個私有數(shù)據(jù)成員的值
cin >> age >> addr;//輸入派生類的兩個私有數(shù)據(jù)成員的值
}
void display_1()//輸出派生類的2個私有數(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個數(shù)據(jù)
stud1.display();//輸出基類的3個私有數(shù)據(jù)成員的值
stud1.display_1();//輸出派生類2個私有數(shù)據(jù)成員的值
system("pause");
return 0;
}
結果:
1111 yao M 20 xi'an
num:1111
name:yao
sex:M
age:20
address:xi'an
請按任意鍵繼續(xù). . .
例2.用私有繼承方式,在程序中包括輸入數(shù)據(jù)的函數(shù),運行程序輸入num,name,sex,age,addr的值,輸出以上5個數(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;
}
結果:
1111 yao M 20 xi'an
num:1111
name:yao
sex:M
age:20
address:xi'an
請按任意鍵繼續(xù). . .
例3.用保護繼承方式,在程序中包括輸入數(shù)據(jù)的函數(shù),運行程序輸入num,name,sex,age,addr的值,輸出以上5個數(shù)據(jù)的值。
解:程序:
#include<iostream>
using namespace std;
class Student//聲明基類
{
public://基類公用成員
void get_value();
void display();
protected://基類保護成員
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//聲明一個保護派生類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;
}
結果:
1111 yao M 20 xi'an
num:1111
name:yao
sex:M
age:20
address:xi'an
請按任意鍵繼續(xù). . .
四、繼承與轉換--賦值兼容規(guī)則:
1.子類對象可以賦值給父類對象,父類對象不能賦值給子類對象;
2.父類的指針/引用可以指向子類對象,子類的指針/引用不能指向父類對象(可以通過強制類型轉換完成)
五、繼承體系中的作用域:
1.在繼承體系中基類和派生類都有獨立的作用域。
2.子類和父類中有同名成員,子類成員將屏蔽父類對成員的直接訪問。(在子類成員函數(shù)中,可以使用 基類::基類成員 訪問)--隱藏
注意:在實際中在繼承體系里面最好不要定義同名的成員。
六、派生類的6個默認成員函數(shù)
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站題目:繼承與派生定義及相關程序調(diào)用舉例-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://jinyejixie.com/article40/isdeo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、面包屑導航、定制網(wǎng)站、營銷型網(wǎng)站建設、網(wǎng)站收錄、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容