是   BBBBBBBBB

解决方案 »

  1.   

    no ,the result is "the program is terminated unnormally"
      

  2.   

    这段代码原样根本编译不过去 :P
    小做修改(没有动dynaimc_cast)后是"BBBBBBB"
      

  3.   

    it can be compiled ,just a warning
      

  4.   

    不知道你用的什么编译器,我用vc6A(int v){ a = x;};这个就编不过去,x没有定义 。
    而且类成员默认的是私有,B根本无法访问A的构造器等。
      

  5.   

    我只是从程序中截取一段,编译过去就行了,问题是运行结果呢?是BBBBBB还是非法?
      

  6.   

    BBBBBBBBBB没有非法。
    那样对派生类使用dynamic_cast转化成基类类型指针应该是安全的。
      

  7.   

    BBBBBBBB
    你这种情况用static_cast开销会更小。
      

  8.   

    #include "stdio.h"class A{
    public:
    int a;
    A(){ a = 0;};
    A(int v){ a = v;};
    virtual void f(){printf("AAAAAAAAAA\n");};
    };class B :public A{
    public:
    int b;
    B(){b = 1;};
    B(int v){ b = v;};
    void f(){printf("BBBBBBBBBB\n");};
    };main()
    {
    B *pB=new B();
    A *pA = dynamic_cast<A *>(pB);
    pA->f();
    }是BBBBBBBBBB
      

  9.   

    为什么不是AAAAAAAAAAAA呢?为什么用static_cast的开销更少?请高手指教!
      

  10.   

    为什么不是AAAAAAAAAAAA呢?为什么用static_cast的开销更少?请高手指教!
      

  11.   

    为什么不是AAAAAAAAAAAA呢?为什么用static_cast的开销更少?请高手指教!
      

  12.   

    dynamic_cast需要RTTI支持,static_cast不需要。RTTI会在vtable放一个指针指向一个typeinfo结构,这会有一定开销。static_cast是无映射变换,只是把目标窄化而已。