C++ Primer 5th笔记(chap 18 大型程序工具)类型转换与多个基类
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 18 大型程序工具)类型转换与多个基类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 在只有一個基類的情況下, 派生類的指針或引用能自動轉換成一個可訪問基類的指針或引用。 我們可以令某個可訪問基類的指針或引用直接指向一個派生類對象。
eg. 一個ZooAnimal、 Bear 或 Endangered 類型的指針或引用可以綁定到 Panda 對象上
/ / 接受 Panda 的基類引用的一系列操作 void print(const Bears); void highlight(const Endangered& ); ostream& operator << (ostreamS, const ZooAnimals); Panda ying_yang("ying_yang"); print (ying_yang); //把一個 Panda 對象傳遞給一個 Bear 的引用 highlight (ying_yang); //把一個 Panda 對象傳遞給一個 Endangered 的引用 cout << ying_yang << endl; //把一個 Panda 對象傳遞給一個 ZooAnimal 的引用編譯器不會在派生類向基類的幾種轉換中進行比較和選擇, 在它看來轉換到任意一種基類都一樣好
void print (const Bear & ); void print (const Endangered& ); Panda ying_yang ("ying_yang" ); print (ying_yang); // 二義性錯誤1.1 基于指針類型或引用類型的查找
對象、 指針和引用的靜態類型決定了我們能夠使用哪些成員
Bear *pb = new Panda ("ying_yang" ) ; pb->print ( ); / / 正確: Panda::print ( ) pb->cuddle ( );/ / 錯誤: 不屬于 Bear 的接口 pb->highlight ( );/ / 錯誤:不屬于 Bear 的接口 delete pb;/ / 正確: Panda::~Panda ( )eg. 當我們通過 Endangered 的指針或引用訪問一個 Panda 對象時, Panda 接口中Panda 特有的部分以及屬于 Bear 的部分都是不可見的:
Endangered *pe = new Panda ("ying_yang" ); pe->print ( );// 正確: Panda::print ( ) pe->toes ( );/ / 錯誤: 不屬于 Endangered 的接口 pe->cuddle ( ) ;/ / 錯誤: 不屬于 Endangered 的接口 pe->highlight ( );/ / 正確: Panda::highlight ( ) delete pe;| ZooAnimal::ZooAnimal ; Bear::Bear ; Endangered::Endangered; Panda::Panda | |
| highlight | Endangered::Endangered ; Panda::Panda |
| toes | Bear::Bear; Panda::Panda |
| cuddle | Panda::Panda |
| 析構函數 | ZooAnimal::ZooAnimal ; Endangered::Endangered |
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 18 大型程序工具)类型转换与多个基类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha