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

admin2015-07-24  28

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

选项 A、ACC
B、ACB
C、BCC
D、BCB

答案A

解析 程序定义了类AA,成员函数disp是虚函数;类BB公有继承AA,重新定义了函数disp,由虚函数的性质可知,即使BB中未使用virtual修饰disp,函数disp仍然是虚函数;类CC公有继承了BB,同样重新定义了虚函数disp;main函数中定义了BB类对象bb,CC类对象cc,BB类引用rb,rb被初始化指向cc;然后调用plot函数,由于plot函数的形参是AA类对象a,不满足多态性中调用者必须要是引用或者指针类型的条件,所以无论实参是bb或cc,a.disp()调用的都是AA类中的函数disp,输出“A”;cc.disp()显然调用的是类cc中的函数,输出“c”;rb.disp(),由于rb是引用,指向的是类CC对象cc,所以这里由多态性司知调用的是cC类中的disp函数,输出“CC”;程序输出结果为:“ACC”;答案为A。
转载请注明原文地址:https://kaotiyun.com/show/gcNp777K
0

最新回复(0)