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;
函数含有自定义版本的类
printZooAnimal::ZooAnimal ; Bear::Bear ; Endangered::Endangered; Panda::Panda
highlightEndangered::Endangered ; Panda::Panda
toesBear::Bear; Panda::Panda
cuddlePanda::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 大型程序工具)命名空间特性

C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间

C++ Primer 5th笔记(chap 18 大型程序工具)构造函数与虚继承