请问运行结果是?
class AA
{
public:
virtual void fun1()
{
cout << "AA_fun2" << endl;
}
void fun2()
{
cout << "AA_fun2" << endl;
}
};
class BB:public AA
{
public:
void fun1()
{
cout << "BB_fun1" << endl;
}
void fun2()
{
cout << "BB_fun2" << endl;
}
};
void showFun(AA* aa)
{
if(aa!=NULL)
{
aa->fun1();
aa->fun2();
}
}
int main(int argc,char* agv[])
{
BB* cl = new BB();
showFun(dynamic_cast<AA*>(cl));
delete cl;
return 0;
}
分析:考察dynamic_cast、虚函数、继承
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。