大家好,欢迎来到IT知识分享网。
转载:https://blog.csdn.net/gaojing303504/article/details/78860773
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,
并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。
前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型至少含有虚函数时(最简单是基类析构函数为虚函数),才能进行这种转换。否则,编译器会报错。
用个例子来说明:
1.基类中没有虚函数:
#ifndef _CLASS_H_ #define _CLASS_H_ class Base { public: Base(); ~Base(); void print(); }; class Inherit :public Base { public: Inherit(); ~Inherit(); void show(); }; #endif
#include "Class.h" #include <iostream> Base::Base() { } Base::~Base() { } void Base::print() { std::cout << "Base funtion" << std::endl; } Inherit::Inherit() { } Inherit::~Inherit() { } void Inherit::show() { std::cout << "Inherit funtion" << std::endl; }
#include "Class.h" int main() { Base* pbase = new Inherit(); Inherit* pInherit = dynamic_cast<Inherit*>(pbase); return 0; }
编译器报错:
我们改基类
class Base { public: Base(); virtual ~Base(); void print(); };
#include "Class.h" int main() { Base* pbase = new Inherit(); Inherit* pInherit = dynamic_cast<Inherit*>(pbase); pInherit->show();//这样动态转换,我们就可以调用派生类的函数了 return 0; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/35094.html