C++ static_cast,reinterpret_cast,dynamic_cast使用示例比较

class Base
{
public:
    virtual void testprint() {
        cout << "base class print" << endl;
    }
};

class MyClass : public Base
{
public:
    void testprint() {
        cout << "MyClass class print" << endl;
    }

};

class MyClass11 : public Base
{
};

int main()
{
    MyClass a;
    static_cast<Base>(a).testprint();
    dynamic_cast<Base>(a).testprint();  //“Base”: dynamic_cast 的目标类型无效,目标类型必须是指向已定义类的指针或引用
    MyClass* aptr = new MyClass();
    dynamic_cast<Base*>(aptr)->testprint();   //有虚函数virtual输出:MyClass class print,没有virtual输出:base class print
    static_cast<Base*>(aptr)->testprint();    //有虚函数virtual输出:MyClass class print,没有virtual输出:base class print
   
    cout << "---------------------------------------------" << endl;
    Base* baseptr = new Base();
    static_cast<MyClass*>(baseptr)->testprint();   //没有virtual输出:MyClass class print, 有virtual输出:base class print
    dynamic_cast<MyClass*>(baseptr)->testprint();    //没有virtual编译会报错; 有virtual运行出错:引发了异常: 读取访问权限冲突。 ___RTDynamicCast(...) 返回 nullptr。
    reinterpret_cast<MyClass*>(baseptr)->testprint();   //没有virtual输出:MyClass class print, 有virtual输出:base class print

    cout << "---------------------------------------------" << endl;
    MyClass11 obj11;
    obj11.testprint();
}

 

Guess you like

Origin blog.csdn.net/lxiao428/article/details/106078041