15.6 純虛函數
在函數列表後面寫上=0以指定純虛函數。
將函數定義為純虛函數(pure virtual function)能夠說明,該函數為後代類型提供了可以覆蓋的接口,但是這個類中的版本絕不會調用。重要的是,用戶將不能創建含有純虛函數的類型的對象。
含有(或繼承)一個或多個純虛函數的類是抽象基類(abstract base class)。除了作為抽象基類的派生類的對象的組成部分,不能創建抽象類型的對象。
class Base
{
public:
virtual int Get() =0;
};
class Child: public Base
{
public:
int Get()
{
return 10;
}
};
Base &c1=Child();
cout<<c1.Get()<<endl; //10
15.7 容器與繼承
因為派生類對象在賦值給基類對象時會被“切掉”,所以容易以通過繼承相關的類型不能很好地融合。
唯一可行的選擇是使用容器保存對象的指針。這個策略可行,但代價是需要用戶面對管理對象和指針的問題,用戶必須保證只要容器存在,被指向的對象就存在。如果對象時動態分配的,用戶必須保證在容器消滅時適當地釋放對象。原因是:引用類型與指針的靜態類型與動態類型可以不同,多態性的基石。
15.8 句柄類與繼承
C++面向對象不能使用對象支持面向對象編程,相反,必須使用指針或引用。
句柄類存儲和管理基類指針。指針所指對象的類型可以變化,它既可以指向基類類型對象又可以指向派生類型對象。用戶通過句柄類訪問繼承層次的操作。因為句柄類使用指針執行操作,虛成員的行為將在運行時根據句柄實際綁定的對象的類型而變化因此,句柄的用戶可以獲得動態行為但無需操心指針的管理。
摘自 xufei96的專欄