class 派生類(子類)名稱 : 繼承方式名(如public)+ 基類(父類)名稱{};
1、公有繼承(public):當乙個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過呼叫基類的公有和保護成員來訪問。對於基類的保護成員,派生類可以進行訪問,但類外不可。
class
person
void
eat(
)void
sleep()
protected
:voida(
)private:
int year;};
class
worker
:public person
void
show()
//基類的私有成員不能被派生類訪問,會報錯
void
show2()
//基類的保護成員能被派生類訪問,不會報錯};
intmain()
2、保護繼承(protected): 當乙個類派生自保護基類時,基類的公有和保護成員將成為派生類的保護成員。
class
person
void
eat(
)void
sleep()
protected
:voida(
)private:
int year;};
class
worker
:public person
void
show()
//基類的私有成員不能被派生類訪問,會報錯
void
show2()
//基類的保護成員能被派生類訪問,不會報錯};
intmain()
3、私有繼承(private):當乙個類派生自私有基類時,基類的公有和保護成員將成為派生類的私有成員。總結:
注:乙個派生類繼承了所有的基類方法,但下列情況除外:
1、基類的建構函式、析構函式和拷貝建構函式。
2、基類的過載運算子。
3、基類的友元函式。
在繼承方式下,派生類獲得了基類成員的乙份拷貝,這份拷貝構成了派生類物件內部的乙個基類子物件。也就是說,在派生類物件中存在乙個基類子物件。所以,基類物件與派生類物件之間存在「賦值相容性」。
基類物件能解決的事情,派生類物件也能解決,情況如下:
1、把派生類物件賦值給基類物件。
2、把派生類物件的位址賦值給基類指標。
3、用派生類物件初始化基類物件的引用。
反之則不行,如下:
1、不能把基類物件賦值給派生類物件。
2、不能把基類物件的位址賦值給派生類物件的指標。
3、也不能把基類物件作為派生物件的引用。
**例項:
class
person
~person()
void
show()
protected
: string myname;};
class
worker
:public person
~worker()
void
show2()
protected
:int myage;};
intmain()
在函式中,如果形式引數是基類物件,也可以用派生類物件作為實參。
分三種情況:
1、形參是基類物件。
2、形參是基類物件的引用。
3、形參是指向基類物件的指標。
class
person
~person()
void
show()
protected
: string myname;};
class
worker
:public person
~worker()
void
show2()
protected
:int myage;};
void
test1
(person p)
void
test2
(person &p)
void
test3
(person *p)
intmain()
多重繼承:即不斷巢狀繼承:
如人類->軍人->軍官。
多繼承:即乙個類從多個類中繼承了屬性即方法等。
基本語法:
class 派生類(子類)名稱 : 繼承方式名(如public)+ 第一基類(父類)名稱, 繼承方式名(如public)+ 第一基類(父類)名稱,… ; 即新增多幾個類,以逗號分隔。
例子:
class
person
~person()
void
show()
protected
: string myname;};
class
soldier
~soldier()
void
show2()
protected
: string mynumber;};
class
headmaster
:public person,
public soldier};
intmain()
先提出菱形繼承的概念:
這種情況的繼承容易出現二義性:假如類 a 有乙個成員變數 a,那麼在類 d 中直接訪問 a 就會產生歧義,編譯器不知道它究竟來自 a -->b–>d 這條路徑,還是來自 a–>c–>d 這條路徑。
因此有了虛繼承。使得在派生類中只保留乙份間接基類的成員。虛繼承的目的是讓某個類做出宣告,承諾願意共享它的基類。其中,這個被共享的基類就稱為虛基類,在這種機制下,不論虛基類在繼承體系**現了多少次,在派生類中都只包含乙份虛基類的成員,就避免了二義性的發生。
使用方法:在繼承方式前面加上 virtual 關鍵字就是虛繼承。
C 入門之 繼承
簡介 繼承 就是在已存在的類的基礎上建立乙個新的類。已存在的類稱為 基類 或者 父類 新建的類稱為 派生 類 或 子類 是物件導向程式設計使 可以復用的最重要的手段,它允許程式設計師在保持原有類特性的基礎上進行擴充套件,增加功能。方式 public 基類訪問許可權保持不變 private 基類的公有...
C 入門1 2 繼承
class derivedclass baseclass 乙個類最多隻允許從乙個其他類派生 derivedclass還可以派生出更多的類。不需要也不能顯式指定繼承是公共 私有還是保護,因為c 的繼承都是公共的。派生類包含基類所有的方法和字段。在派生類中呼叫基類構造器來進行基類欄位的初始化。class...
c 入門之繼承
1.b繼承了a b也有name和adress這兩個字段 此時 a為b的基類 public class a public class b a2.c雖然不是直接從a派生出來的,但它繼承了a的成員 public class a public class b a public class c b3.基類的所...