本文介绍: (1)运行阶段类型识别(RTTI, Runtime Type Identification)为程序在阶段确定对象的类型,只适用于包含虚函数的类。(2)基类指针可以指向派生类对象,想要调用派生类对象的非虚函数需要使用dynamic_cast运算符,dynamic_cast运算符用指向基类的指针来生成派生类指针;(4)如果转换不成功,dynamic_cast返回nullptr。注意:(1)dynamic_cast可以将派生类指针转化为基类指针,这种做法没有任何意义;
一、dynamic_cast运算符介绍
(1)运行阶段类型识别(RTTI, Runtime Type Identification)为程序在阶段确定对象的类型,只适用于包含虚函数的类。
(2)基类指针可以指向派生类对象,想要调用派生类对象的非虚函数需要使用dynamic_cast运算符,dynamic_cast运算符用指向基类的指针来生成派生类指针;
(3)语法:
(4)如果转换不成功,dynamic_cast返回nullptr。
注意:
(1)dynamic_cast可以将派生类指针转化为基类指针,这种做法没有任何意义;
(2)dynamic_cast可以用于引用,但是没有空指针对应引用值,如果转换请求不正确,会出现bad_cast异常;
(3)dynamic_cast只适用于包含虚函数的类。
二、例子
1、多态的例子
以下是一个正常的多态案例:
2、强转基类指针
如果想要调用派生类的非重写函数,必须转化基类指针为派生类指针:
以下代码,当为典韦时,新建一个典韦指针,指向强转类型才能调用DW类的非重写函数
3、dynamic_cast操作符的使用
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。