20180516-2

1. 对下面的程序段

 

 

 

 

编译运行后,程序输出结果是()

CB::f1() CC::f2()
CB::f1() CB::f2()
CB::f1() CA::f2()
CA::f1() CC::f2()

答案:B 错选:C
CA* pa = &c;这句话是父类指针指向子类对象,调用pa->f1()时,因为父类中的f1()是虚函数,所以将发生动态绑定,调用子类CB中的f1()函数,先输出CB::f1()
在CB类的f1()函数中,调用非虚函数f2(),但因为其父类CA中的f2()函数并不是virtual函数,所以将调用CB类中的f2()函数,输出CB::f2()。如果将CA类中的f2()改成虚函数,那么将输出CC::f2();如果将CB类中的f2()改成虚函数,也将输出CC::f2(),这是满足动态绑定的。
 
posted @ 2018-05-28 20:45  Kxzh  阅读(77)  评论(0编辑  收藏  举报