- ?? 個人簡介:CSDN「博客新星」TOP 10 , C/C++ 領域新星創(chuàng)作者
- ?? 作 ?? 者:錫蘭_CC ??
- ?? 專 ?? 欄:從零開始的 c++ 之旅
- ?? 若有幫助,還請關注?點贊?收藏,不行的話我再努努力??????
前言
c++
面向對象三大特性:封裝,繼承,多態(tài)。通過本文我們將了解什么是類的繼承以及繼承的使用。
Q:什么是繼承?
A: 繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。子類的對象擁有其父類全部屬性與服務,稱作子類對父類的繼承。例如,輪船、客輪;人、大人。一個類可以是多個父類的子類,它從多個父類中繼承了屬性與服務,這稱為多繼承。例如,客輪與輪船和客運工具。
一、類的繼承
在學習繼承之前,我們先來了解一下基類和派生類。
1、基類與派生類
我們先來看下面這串代碼:
#include<iostream>
using namespace std;
class Student {
public:
int age;
char *name;
Student() {
age = 18;
name = "Ceylan";
}
};
class Undergraduate:public Student {
public:
int grate;
Undergraduate():Student() {
grate = 1;
}
};
int main() {
Undergraduate s;
cout << s.age << endl;
return 0;
}
在這個例子中,學生類Student
就可以作為一個基類,研究生類Undergraduate
就是一個派生類。
在main
函數(shù)中,我們首先用構造函數(shù)進行初始化,研究生類Undergraduate
通過公共方法繼承了Student
類,也就是繼承 了Student
類的成員屬性和方法,就可以輸出Student
的成員變量age
的值。
2、什么是派生類
Q:什么是派生類?
A: 派生類就是繼承了一個或者多個類的子類。
3、派生類如何定義
Q:派生類如何定義?
A: 參考上文代碼,程序中先定義基類Student
,再定義派生類Student
繼承基類Student
。需要注意,在c++
中,繼承可以是多繼承,也就是說派生類可以同時繼承多個類,語法如下所示:
class Derived:public Base1,public Base2 {
//...
}
4、派生類的特點
- 派生類擁有基類的所有數(shù)據成員和成員函數(shù)(不包括構造函數(shù)和析構函數(shù))
- 派生類可以擁有基類沒有的數(shù)據成員和成員函數(shù)
- 派生類對象可以通過基類的公有函數(shù)訪問基類的私有成員
- 派生類可以看成是一種特殊的基類,也就是說可以把派生對象當成基類對象使用。
二、派生類的訪問權限與作用
在類名冒號之后, 跟著的關鍵字不同,派生類的訪問權限會有不同。根據關鍵字,可以分為三種情況,公有派生、保護派生、私有派生。
1、公有派生
class 類名∶public 基類
{
// …
};
公有派生使用public
關鍵字來繼承,公有派生的所有基類成員在派生類中保持原有的訪問級別。
#include<iostream>
using namespace std;
class A
{
public:
void setx(int n) {
x = n;
}
void showx () {
cout << x << endl;
}
public:
int x;
} ;
class B: private A {
public:
void setxy(int n, int m) {
setx(n);
y = m;
}
void showxy() {
cout << x << " " << y << endl;
}
public:
int y;
};
int main() {
B s;
s.setxy(10,20);
s.showxy();
}
2、保護派生
class 類名∶protected 基類
{
// …
};
保護派生使用protected
關鍵字來繼承,保護派生中public
成員protected
成員、protected
成員不變、private
成員不變。
3、私有派生
class 類名∶private 基類
{
// …
};
私有派生使用private
關鍵字來繼承,私有派生中所有基類成員在派生類中都變?yōu)?code>private成員。
三、派生類的構造函數(shù)與析構函數(shù)
派生類構造函數(shù)和析構函數(shù)的執(zhí)行順序
派生類繼承基類后,當創(chuàng)建派生類對象時,也會調用基類的構造函數(shù)。那么,是先進行基類的構造和析構還是先進行派生類的構造和析構呢?我們來看看下面的代碼案例:
#include<iostream>
using namespace std;
class Base {
//聲明基類
public:
Base() {
cout << "Base 類的構造函數(shù)" << endl;
}
~ Base() {
cout << "Base 類的析構函數(shù)" << endl;
}
};
class Son : public Base {
public:
Son() {
cout << "Son 類的構造函數(shù)" << endl;
}
~ Son() {
cout << "Son 類的析構函數(shù)" << endl;
}
};
int main() {
Son s;
return 0;
}
執(zhí)行效果:
通常情況下,當創(chuàng)建派生類對象時, 首先執(zhí)行基類的構造函數(shù), 隨后再執(zhí)行派生類的構造函數(shù)。當結束派生類對象時, 則先執(zhí)行派生類的析構函數(shù), 隨后再執(zhí)行基類的析構函數(shù)。
四、多繼承
Q:什么是多繼承?
A:多繼承是指從多個直接基類中產生派生類的能力,多繼承的派生類繼承了所有基類的成員。
多繼承可能會引發(fā)基類中有同名成員的出現(xiàn),使用時需要加上作用域進行區(qū)分,詳細代碼如下:
#include<iostream>
using namespace std;
class A1 {
public:
A1() {
a = 100;
}
public:
int a;
};
class A2 {
public:
A2() {
a = 200;
}
public:
int a;
};
class A3 : public A1,public A2 {
public:
A3() {
a = 300;
}
public:
int a;
};
int main() {
A3 s;
cout << s.A1::a << endl;
cout << s.A2::a << endl;
cout << s.A3::a << endl;
return 0;
}
其他:文章來源:http://www.zghlxwxcb.cn/news/detail-419385.html
更多專欄訂閱:文章來源地址http://www.zghlxwxcb.cn/news/detail-419385.html
- ?? 【開卷數(shù)據結構】
- ?? 【備戰(zhàn)藍橋,沖擊省一】
- ??? ?從零開始的 c++ 之旅
- ?? 【OpenCV ? c++】計算機視覺
到了這里,關于<c++> 類的繼承 | 基類與派生類 | 構造函數(shù)與析構函數(shù)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!