繼承的好處:減少重複**
語法:
class 子類(派生類) :繼承方式 父類(基類)
三種繼承方式:
public 繼承(公有繼承)
父類中的public許可權在子類中是public許可權
父類中的protected許可權在子類中是protected許可權
父類中的private許可權在子類中不可訪問
protected 繼承(保護繼承)
父類中的public許可權在子類中是protected許可權
父類中的protected許可權在子類中是protected許可權
父類中的private許可權在子類中不可訪問
private繼承(私有繼承)
父類中的public許可權在子類中是private許可權
父類中的protected許可權在子類中是private許可權
父類中private許可權在子類中不可訪問
父類中所有非靜態成員屬性都會被子類繼承下去
父類中的私有成員被子類繼承了,但是被編譯器隱藏了,不能被訪問
class
base
;class
person
:public base;.
..cout<<
sizeof
(person)
<
//person的大小是16
通過vs自帶工具檢視類的物件模型工具:
命令語句:
cl[空格]/d1[空格]reportsingleclasslayout類名[空格]「檔名.cpp」
顯示結果:
先構造父類,再構造子類
先析構子類,再析構父類
同名成員變數
語法:
訪問子類的成員變數,物件.成員名
訪問父類的成員變數,物件.父類名::成員名
class
base};
class
person
:public base};
...person p;
cout<
cout<
<:a>
同名成員函式
語法:
訪問子類的成員函式,物件.函式名
訪問父類的成員函式,物件.父類名::函式名
class
base
void
test
(int a)};
class
person
:public base
void
test()
};intmain()
靜態成員
靜態成員變數
語法:
訪問子類的靜態成員變數,物件.靜態成員名
訪問父類的靜態成員變數,物件.父類名::靜態成員名
class
base
;class
person
:public base
;int base::a=
100;
int person::a=
200;
intmain()
通過類名訪問
class
base
;class
person
:public base
;int base::a=
100;
int person::a=
200;
intmain()
語法:class 子類 :繼承方式 父類,繼承方式 父類
c++語法中允許繼承多個類,多個父類中的同名成員通過作用域區分。
實際開發中不太建議多繼承
菱形繼承帶來的問題:
b繼承了a的資料,c繼承了a的資料,當d使用a的資料時,會產生二義性
d繼承了a的資料繼承了兩份,不需要繼承兩份
解決方法:
虛繼承
被虛繼承的父類稱為虛基類
語法:class 子類 :virtual 繼承方式 父類
實現方式:從虛基類繼承乙個虛基類指標而不是乙份資料,虛基類指標指向乙個虛基類表,虛基類表中記錄的是資料儲存位置的偏移量。對於從同一虛基類虛繼承的不同子類來說,訪問虛基類中的乙個資料訪問的是記憶體中同乙個位置的資料。
c 學習筆記十六
c with classes 盡量以const enum inline 替換 define 示例 define aspect ratio 1.653 不進入記號表 symbol table 替換為const aspectratio 1.653 進入記號表 定義常量字串 const std strin...
C 繼承學習筆記
派生類從基類繼承了保護 protected 成員和公有 public 成員函式,但是繼承不了基類的過載建構函式。定義乙個如下基類 class counter counter operator counter n void reset int getcount int getnum counter c...
C 學習筆記 繼承
一 c 中的繼承方式會影響子類的對外訪問屬性 public 修飾的成員變數 方法 在類的內部 類的外部都能使用 protected 修飾的成員變數方法,在類的內部使用,在繼承的子類中可用 private 修飾的成員變數方法,只能在類的內部使用 二 private成員在子類中依然存在,但是卻無法訪問到...