有如下程序: #include using namespace std; elass Shape{//图形类 public: //图形绘制函数(用显示字母模拟) virtual void draw()

admin2021-05-06  15

问题 有如下程序:   
    #include
    using namespace std;
    elass Shape{//图形类
    public:
    //图形绘制函数(用显示字母模拟)
    virtual void draw()eonst{eout<<’S’;}
    };
    class Circle:public Shape{//圆形类
    public:
    void draw()eonst{eout<<’C’;}
    };
    void plot(Shape&s){s.draw();}
    int main(){   
    Shape木ps=new Circle;
    Circle t;
    ps->draw();
    t.draw();
    plot(t);
    delete ps;   
    retum 0;
    }
    运行这个程序的输出是(    )。

选项 A、SCC
B、SCS
C、CSS
D、CCC

答案D

解析 C++中,多态性调用需要满足两个条件,1、被调用成员函数必须是虚函数;2、必须通过基类类型的引用或指针进行函数调用。多态性使程序在运行时期根据指针或引用所指对象的类型来决定调用哪个函数。
    程序中,类shape定义了虚函数draw(),在派生类circle中重写了函数draw();main函数中,分别使用指针、对象、引用三种方式调用函数draw(),指针ps是基类指针,指向的是派生类的对象,所以这里根据多态性,将调用Circle中的draw函数,输出“C”;对象t是Circle对象,也调用Circle中的dmw函数,输出“C”;函数p10t()执行时引用s引用的是实参t,引用对象是派生类Circle对象,根据多态性,同样调用Circle中的draw函数,输出“C”;结果输出为“CCC”;答案为D。
转载请注明原文地址:https://kaotiyun.com/show/6Xfp777K
0

最新回复(0)