下面程序的输出是()
class A
{
public:
void foo()
{
printf("1");
}
virtual void fun()
{
printf("2");
}
};
class B: public A
{
public:
void foo()
{
printf("3");
}
void fun()
{
printf("4");
}
};
int main(void)
{
A a;
B b;
A *p = &a;//自己理解,调用的基类指针所以用的A
p->foo();
p->fun();
p = &b;//调用的派生类指针,所以不能显示那个父类虚函数
p->foo();
p->fun();
A *ptr = (A *)&b;
ptr->foo();
ptr->fun();
return 0;
}
链接:https://www.nowcoder.com/questionTerminal/f29ec891b0284259a922d0dae964ef3a
来源:牛客网

1,首先声明为A类型的指针指向实际类型为A的对象,调用的肯定是A的方法,输出1 2,

3,声明类型为A的指针指向实际类型为B的对象,进行一个强制类型转换,其实这种父类指针指向子类会自动进行类型转换,所以是否强制类型转换都不影响结构,原理同上一步,结果输出1

正确答案: B 你的答案: B (正确)
121434
121414
121232
123434