繼承
1)繼承是面向對象程序設計實現軟件重用的重要方法。程序員可以在已有基類的基礎上定義新的派生類。
2) 單繼承的派生類只有一個基類。多繼承的派生類有多個基類。
3) 派生類對基類成員的訪問由繼承方式和成員性質決定。
4) 創建派生類對象時,先調用基類構造函數初始化派生類中的基類成員。調用析構函數的次序和調用構造函數的次序相反。
5)C++提供虛繼承機制,防止類繼承關系中成員訪問的二義性。
6) 多繼承提供了軟件重用的強大功能,也增加了程序的復雜性。
派生類類成員訪問級別
1、需要被外界訪問的成員直接設置為public
2、只能在當前類中訪問的成員設置為private
3、只能在當前類和子類中訪問的成員設置為protected,protected成員的訪問權限介於public和private之間。
//類的繼承方式對子類對外訪問屬性影響
#include
#include
using namespace std;
class A
{
private:
int a;
protected:
int b;
public:
int c;
A()
{
a = 0;
b = 0;
c = 0;
}
void set(int a, int b, int c)
{
this->a = a;
this->b = b;
this->c = c;
}
};
class B : public A
{
public:
void print()
{
//cout<
類型兼容性原則
子類對象可以當作父類對象使用
子類對象可以直接賦值給父類對象
子類對象可以直接初始化父類對象
父類指針可以直接指向子類對象
父類引用可以直接引用子類對象
#include
#include
using namespace std;
//子類就是特殊的父類
class Parent03
{
protected:
const char* name;
public:
Parent03()
{
name = Parent03;
}
void print()
{
cout<name = Child2;
this->i = i;
}
};
int main()
{
Child03 child03(1000);
//分別定義父類對象 父類指針 父類引用 child
Parent03 parent = child03;
Parent03* pp = &child03;
Parent03& rp = child03;
parent.print();
pp->print();
rp.print();
system(pause);
return 0;
}
繼承中構造和析構
在子類對象構造時,需要調用父類構造函數對其繼承得來的成員進行初始化
在子類對象析構時,需要調用父類析構函數對其繼承得來的成員進行清理
#include
#include
using namespace std;
class Parent04
{
public:
Parent04(const char* s)
{
cout<
1、子類對象在創建時會首先調用父類的構造函數
2、父類構造函數執行結束後,執行子類的構造函數
3、當父類的構造函數有參數時,需要在子類的初始化列表中顯示調用
4、析構函數調用的先後順序與構造函數相反
繼承中的同名成員變量
1、當子類成員變量與父類成員變量同名時
2、子類依然從父類繼承同名成員
3、在子類中通過作用域分辨符::進行同名成員區分(在派生類中使用基類的同名成員,顯式地使用類名限定符)
4、同名成員存儲在內存中的不同位置