关于dynamic_cast的问题 是 BBBBBBBBB 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 no ,the result is "the program is terminated unnormally" 这段代码原样根本编译不过去 :P小做修改(没有动dynaimc_cast)后是"BBBBBBB" it can be compiled ,just a warning 不知道你用的什么编译器,我用vc6A(int v){ a = x;};这个就编不过去,x没有定义 。而且类成员默认的是私有,B根本无法访问A的构造器等。 我只是从程序中截取一段,编译过去就行了,问题是运行结果呢?是BBBBBB还是非法? BBBBBBBBBB没有非法。那样对派生类使用dynamic_cast转化成基类类型指针应该是安全的。 BBBBBBBB你这种情况用static_cast开销会更小。 #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 为什么不是AAAAAAAAAAAA呢?为什么用static_cast的开销更少?请高手指教! 为什么不是AAAAAAAAAAAA呢?为什么用static_cast的开销更少?请高手指教! 为什么不是AAAAAAAAAAAA呢?为什么用static_cast的开销更少?请高手指教! dynamic_cast需要RTTI支持,static_cast不需要。RTTI会在vtable放一个指针指向一个typeinfo结构,这会有一定开销。static_cast是无映射变换,只是把目标窄化而已。 如何通过telnet,mgr->Users->Create下的Entity Number 属性 求助!!! 同一个求CPU序列号的VB6+wmi1.2程序,在同一台机器上用windows me和windows server 2003两种操作系统求出的CPU序列号不一样,是怎么回事? 求助求助,vs2005编译连接问题? 如何用图片来做按钮? 请问如何在treectrl的结点处显示两个? 问一个基础问题 关于编译错误的请教,请大虾赐教?? 请问随机密码的程序怎么做? visual c++ 是不是好难? vc里怎么使一个对话框最大化??? catch语句的问题
小做修改(没有动dynaimc_cast)后是"BBBBBBB"
而且类成员默认的是私有,B根本无法访问A的构造器等。
那样对派生类使用dynamic_cast转化成基类类型指针应该是安全的。
你这种情况用static_cast开销会更小。
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