c++覆盖问题
#include<iostream>#include<string>
using namespace std;
class a
{
public:
void virtual f()
{
cout<<"a"<<endl;
}
};
class b:public a
{
public:
void virtual f()
{
cout<<"b"<<endl;
}
};
int main()
{
a* pa=new a;
pa->f();
b* pb=(b*)pa;
pb->f();
delete pa,pb;
pa=new b;
pa->f();
pb=(b*)pa;
pb->f();
return 0;
}
为什么结果是a,a,b,b?
a* pa=new a;创建a 类的实例对象pa为类a的实例对象
pa->f(); 打印出'a'
b* pb=(b*)pa; pb 指向pa ,所以pb等于pa
pb->f(); 打印'a'
delete pa,pb;删除实例对象
pa=new b;pa赋值为 b的实例对象
pa->f(); 所以打印 'b'
pb=(b*)pa; pb指向pa ,pa又是类b的实例对象
pb->f(); 所以打印出b
return 0;
} 谢谢,麻烦再帮我看看下面这个问题
#include<iostream>
#include<string>
using namespace std;
class a
{
int ma;
};
class bb
{
int mb;
};
class c:public a,public b
{
int mc;
};
int main()
{
c* pc=new c;
b* pb=dynamic_cast<b*>(pc);//为什么不是用static_cast
if(pc==pb)//解释说这里有隐式类型转换(c*)pb,为什么?
{
cout<<"equal"<<endl;
}
return 0;
}
结果为是么是equal?
页:
[1]