有如下的类声明: #include using namespace std; class AA{ public: virtual void disp(){ cout

admin2020-06-29  20

问题 有如下的类声明:
     #include
     using namespace std;
     class AA{
     public:
         virtual void disp(){ cout<<’A’; }
     };
     class BB: public AA{
     public:
         void disp(){ cout<<’B’; }
     };
     class CC: public BB{
     public:
         virtual void disp(){ cout<<’C’; }
     };
     void plot(AA &a){ a.disp(); }
     int main(){
         BB bb;
         CC cc;
         BB &rb=cc;
         plot(bb);
         plot(cc);
         rb.disp();
         return 0;
     }
运行这个程序的输出是

选项 A、AAC
B、AAB
C、BCC
D、BCB

答案C

解析 程序定义了类AA,成员函数disp()为虚函数;类BB公有继承AA,重新定义了disp()函数;类CC公有继承BB,同样重新定义了disp()函数;类BB中,虽然disp()未用virtual修饰,但是由虚函数性质可知,BB中的disp()函数仍然是虚函数;main()函数中,创建BB对象bb,CC对象cc,使用cc初始化BB类引用rb,然后调用plot函数;plot函数的形参是AA类的引用,通过AA类引用调用disp函数,满足多态性条件,将根据引用所指对象的类型来决定调用哪个disp函数;所以plot(bb)调用类BB中的disp函数,plot(cc)调用CC中的disp函数;输出分别为:"B"、"C";另外由于rb为BB类引用,所指对象是cc,所以运行rb.disp()时调用的是CC中的disp()函数,输出"C",综上,程序输出为:"BCC";答案为C。
转载请注明原文地址:https://jikaoti.com/ti/oZl0FFFM
0

最新回复(0)