C++动态绑定问题

gra*_*asm 1 c++ model-view-controller g++

问题是:
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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Oli*_*rth 5

不,这不合法. B不是来自A,反之亦然.强制执行这样的强制转换会导致未定义的行为.你告诉编译器"闭嘴,我知道我在做什么",这会导致各种各样的麻烦.这是避免旧C风格转换的一个原因,而是使用C++风格的转换(static_cast等等).