繁体   English   中英

C ++动态绑定问题

[英]C++ dynamic binding problem

问题是:
a)以下代码是否合法? (考虑到它在运行时崩溃)
b)如果在编译时有gcc或MVC的任何编译器标志要显示,则以下代码中可能存在问题?

#include <iostream>
using namespace std;
class A
{
public:
    void write(){   cout<<"A"; }    
};
class B
{
public:
    virtual void write(){ cout<<"B"; }  
};
int main()
{

    A *pa=(A*) new B();
    pa->write();
    B *pb=(B*) new A() ;
    pb->write();

    delete pa;
    delete pb;
    return 0;
}

谢谢!

不,这是不合法的。 B不是从A派生A ,反之亦然。 强制这样的转换会导致不确定的行为。 您告诉编译器“关闭,我知道我在做什么”,这会导致各种麻烦。 这是避免使用旧的C样式强制转换,而改用C ++样式强制转换的原因之一( static_cast等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM