繼承
子類擁有父類所有的成員變數和函式、子類是一種特殊的父類、
子類可以當做父類的物件使用、子類可以擁有父類沒有的方法和屬性。
class parent};
class child:
:public parent
;int
main()
繼承的訪問控制
c++中的繼承方式會影響子類對外訪問屬性
1 看呼叫語句,是在類的外部還是在類的內部
2 看子類如何從父類中繼承
3 看父類中的訪問級別
public:父類在子類中保持原有的訪問級別
private:父類在子類中變為private
protected:父類中的public變為protected;父類中的protected還是protected;
父類中private還是private
private成員在子類中依然存在,但是卻無法訪問,不論何種方式繼承基類,
派生類都不能直接使用基類的私有成員
public繼承
class parent
; class child:public parent};
intmain()
private繼承
class parent
; class child:private parent};
intmain()
protected繼承
class parent
; class child: protexted parent};
intmain()
繼承中的型別相容性原則
子類物件可以當做父類物件使用,子類物件可以直接賦值給父類物件
子類物件可以直接初始化父類物件
父類指標可以直接指向子類物件,父類引用可以直接引用子類物件
class parent
private:
int a;};
class child:public parent
private:
int b;};
void
print_p
(parent *p)
void
print_p2
(parent &p)
intmain()
繼承中的構造和析構
在子類物件構造時,需要呼叫父類建構函式對其繼承得來的成員進行初始化
在子類物件析構時,需要呼叫父類析構函式對其繼承得來的成員進行析構
#include
using namespace std;
class parent
void
print_p()
~parent()
private:
int a;
int b;};
class child:public parent
void
print_c()
~child()
private:
int c;};
intmain()
繼承中同名成員變數處理方法
1 當子類成員變數與父類成員變數相同時,子類依然繼承父類的同名成員
2 在子類中通過域分辨符::進行同名成員的區分(在派生類中使用基類的同名成員,顯示的使用類名限定符)
3 同名函式儲存在記憶體的不同位置
注意:在子類中使用成員預設為自己類中的成員
class a};
class b:public a};
intmain()
派生類中的static關鍵字
基類中定義的靜態成員,將被所有派生類共享
遵循派生類的訪問控制
派生類中訪問靜態成員,用以下形式顯示說明
類名::成員 或通過物件訪問:物件名.成員
多繼承(乙個類有多個直接基類的繼承關係)的應用
語法: class 派生類名:訪問控制 基類名1,訪問控制 基類名2
class base1
;class base2
;class child: public base1, public base2
};
二義性與虛繼承
如果乙個派生類從多個基類派生,而這些基類又有乙個共同的積累,
則在對該類中宣告的名字進行訪問時,可能產生二義性
class a
; class b1: public a
;class b2: public a
;class c: public b1, public b2
;int
main()
虛繼承解決方案
class a
; class b1: virtual public a
;class b2: virtual public a
;class c: public b1, public b2
;int
main()
如果不加virtual關鍵字,會執行兩次a的建構函式
虛繼承只能解決有共同基類的成員
virtual關鍵字會在類中新增屬性,從而會使由該類宣告的物件所佔的記憶體空間增大
c 繼承 繼承 的二義性 虛函式
父類 plane 兩個類 乙個是標頭檔案 乙個是原始檔 pragma once include class plane 原始檔 include include include using namespace std plane plane name f 22 year 2010 plane plan...
C 多繼承的二義性
單繼承 派生類只從乙個基類派生 多繼承 派生類從多個基類派生 多重派生 有乙個基類派生出多個不同的派生類 多層派生 派生類又作為基類,繼續派生出新的類 多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 c...
C 多繼承的二義性
多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 class 派生類名 繼承方式1 基類名1 繼承方式2 基類名2 其中,繼承方式1 繼承方式2 是三種繼承方式 public private protec...