C++ Primer 5th笔记(chap 18 大型程序工具)类型转换与多个基类
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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笔记(chap 18 大型程序工具)noexcept
C++ Primer 5th笔记(chap 18 大型程序工具)异常处理
C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常
C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性