C++中深入理解dynamic_cast

C++中深入理解dynamic_cast转载:https://blog.csdn.net/gaojing303504/article/details/78860773dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换

大家好,欢迎来到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;
}

编译器报错:

C++中深入理解dynamic_cast

 

 

我们改基类

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;
}

C++中深入理解dynamic_cast

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/35094.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信