0038关于父类与子类中的一道题(牛客)
求输入: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; p->foo(); p->fun(); p
= &b; p->foo(); p->fun(); A
*ptr = (A *)&b; ptr->foo():
ptr->fun(); return
0;}
答案:B
1,首先声明为A类型的指针指向实际类型为A的对象,调用的肯定是A的方法,输出1 2,
2,然后声明为A类型的指针指向实际类型为B的对象,则非虚函数调用A的方法,输出1,虚函数调用实际类型B的方法,输出4
3,声明类型为A的指针指向实际类型为B的对象,进行一个强制类型转换,其实这种父类指针指向子类会自动进行类型转换,所以是否强制类型转换都不影响结构,原理同上一步,结果输出1 4
所以最终输出为121414
1,首先声明为A类型的指针指向实际类型为A的对象,调用的肯定是A的方法,输出1 2,
2,然后声明为A类型的指针指向实际类型为B的对象,则非虚函数调用A的方法,输出1,虚函数调用实际类型B的方法,输出4
3,声明类型为A的指针指向实际类型为B的对象,进行一个强制类型转换,其实这种父类指针指向子类会自动进行类型转换,所以是否强制类型转换都不影响结构,原理同上一步,结果输出1 4
所以最终输出为121414

浙公网安备 33010602011771号