有以下程序: #include 〈iostream〉 using namespace std; class A { public: virtual void setx(int i,int j=0) {

admin2010-03-29  27

问题 有以下程序:    #include 〈iostream〉    using namespace std;    class A    {    public:       virtual void setx(int i,int j=0)       {          x=i;          y=j;       }       virtual void print()=0;    protected:       int x,y;    };    class B : public A    {    public:       void print()       {          cout〈〈x*x〈〈", ";       }    };    class C  :  public A    {    public:       void print()       {           cout〈〈x*x*x〈〈end1;       }    };    int main()    {       A *pa;       B b;       C c;       pa=&b;       pa->setx(5);       pa->print ();       pa=&c;       pa->setx(2);       pa->print();       return 0;    }    程序运行后的输出结果是(    )。

选项 A、25,8
B、2,5
C、5,2
D、8,25

答案1

解析 该程序中定义了A类、B类和C类共3个类。其中,类A是抽象类,它的类体内有一个纯虚函数pnnt()。抽象类不可以定义对象,但可以定义指向对象的指针。类B和类C都是类A的公有派生类,这些类是具体类,它们对A类中纯虚函数都有不同的实现。该程序的主函数中,定义一个指向类A对象的指针pa,又定义了类B和类C的2个对象,并使指针pa分别指向这些对象。这里,采用动态联编,在运行时选择print()函数。所以,执行语句序列“pa=&b;pa->setx(5);pa->print();”后,系统调用类B的print()函数,输出25;执行语句序列“pa=&c;pa->setx(2);pa->prim();”后,系统调用类C的prim()函数,输出8。
转载请注明原文地址:https://jikaoti.com/ti/YaW0FFFM
0

最新回复(0)