Example o class B继承 class a,即 Bis ga o b big A small = big 正确 °A& zrefsmall=big不调用强制 °A* pSmall=&big 类型转换 class class X 基类部分 Z 派生部分 0 2018, SEU. All rights reserved. 11
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 11 Example B big; A small = big; A &refSmall = big; A *pSmall = &big; x y class A x y class B z 基类部分 派生部分 class B 继承 class A, 即 B is a A 正 确 不调用强制 类型转换
13.2.1 Invoking Base-Class Functions from Derived-Class Objects °通过指向派生类的基类指针,调用的是基类的函数 结论:调用基类还是派生类的函数,取决于句柄的类 型,而不是句柄指向的实际对象类型 0 2018, SEU. All rights reserved. 12
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 12 13.2.1 Invoking Base-Class Functions from Derived-Class Objects 通过指向派生类的基类指针,调用的是基类的函数 结论: 调用基类还是派生类的函数,取决于句柄的类 型,而不是句柄指向的实际对象类型
13.2.2 Aiming Derived-Class Pointers at Base-Class Objects °派生类指针指向基类对象 o Compilation Error 程序 P13.6 0 2018, SEU. All rights reserved. 13
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 13 13.2.2 Aiming Derived-Class Pointers at Base-Class Objects 派生类指针指向基类对象 Compilation Error
Example o class B继承 class a,即 Bis ga o b big o big small 错 A small big 正确 °B*pBig=&sma:误 o A &refsmall big °A* pSmall=&big 考虑会产生何种后果? class class X 基类部分 Z 派生部分 0 2018, SEU. All rights reserved. 14
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 14 Example B big; A small = big; A &refSmall = big; A *pSmall = &big; big = small; B *pBig = &small; x y class A x y class B z 基类部分 派生部分 class B 继承 class A, 即 B is a A 错 误 正 确 考虑会产生何种后果?
13.2.3 Derived-Class Member-Function Calls via base-Class pointers 1321通过指向派生类的基类指针,调用的是基类的 函数; 可否调用派生类独有的函数? Compilation Error °结论:通过对象句柄,仅能调用该句柄类型的成员 函数 程序 P13.7 0 2018, SEU. All rights reserved. 15
© 2009, SEU. All rights reserved. © 2018, SEU. All rights reserved. 15 13.2.3 Derived-Class Member-Function Calls via Base-Class Pointers 13.2.1 通过指向派生类的基类指针,调用的是基类的 函数; 可否调用派生类独有的函数? Compilation Error 结论: 通过对象句柄,仅能调用该句柄类型的成员 函数