C++繼承 及多重繼承 虛基類
C++繼承
- C++類的元素預設都是私有的
- C++不繼承構造和析構函數
基礎文法
class class_name: InheritanceMode base_class_name
{
//member declaration
}
-
C++通路權限
- public
- 類外元素都能通路public元素
- private
- 子類不能通路父類private元素
- 但是還是繼承private元素
- protected
- 子類可以通路父類protected元素
-
InheritanceMode(繼承方式)
- public(一般)
- 父類中的元素繼承到子類後,子類繼承到的元素的通路權限與父類相同
- private
- 無論父類中的元素是什麼樣的通路權限,子類繼承到的元素統統變成private
- protected
- 父類元素通路權限如果為public或protected,子類繼承到的元素的通路權限為protected
- 父類元素通路權限如果為private,子類繼承到的元素的通路權限為private
建立派生類對象
- 先由基類的構造函數建立派生類包含的基類對象,并初始化
- 在由成員對象的構造函數建立成員對象,并初始化
- 最後執行本類的構造函數建立本對象,并初始化
代碼
// polymorphism.cpp: 定義控制台應用程式的入口點。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Point {
protected :
int x;
int y;
public :
Point (int x = ,int y = )
{
}
};
class SpacePoint : public Point {
protected :
int z;
public :
SpacePoint (int px,int py ,int pz = ): Point (px,py)
{
z = pz;
}
void showPoint(){
cout << x << endl;
}
};
int main()
{
return ;
}
多重繼承
- 優點
- 缺點
- 由于c++繼承會把除了構造函數和析構函數都繼承下來, 若父類們有相同聲明的函數, 則可能導緻調用該函數時的二義性
class class_name: InheritanceMode base_class_name1,InheritanceMode base_class_name2
{
//member declaration
}
Virtual Base Classes虛基類
- 特點
Multiple derived class share one copy of base class - 多個派生類共享一份基類
- 建立對象時, 基類的對象隻會建立一次
- 文法
- virtual 關鍵字要在所有的子類繼承中都聲明
- 未添加virtual 的子類會自己再建立 一個基類(就是虛基類那個類)
- Virtual Inheritance (虛繼承) 對象建立順序
- 建立虛基類對象
- 建立基類對象
- 建立對象成員
- 建立對象本身
- 舉例說明
#include <iostream.h>
class A
{
public:
A(){cout<<"A's con."<<endl;}
~A(){cout<<"A's des."<<endl;}
};
class B
{
public:
B(){cout<<"B's con."<<endl;}
~B(){cout<<"B's des."<<endl;}
};
---------------------------------------------------