若有以下程序: #include <iostream> using namespace std; class Base { private: int a,b; public: Base(int

admin2010-03-29  26

问题 若有以下程序:    #include <iostream>    using namespace std;    class Base    {    private:       int  a,b;    public:       Base(int x, int y)       {          a=x;          b=y;       }       void disp ()       {          cout<<a<<"  "<<b<<end1;       }    };    class Derived : public Base    {    private:       int c;       int d;    public:       Derived(int x,int y, int z,int m) :Base(x,y)       {          c=z;          d=m;       }       void disp ()       {          cout<<c<<"  "<<d<<end1;       }    };    int main()    {       Base b(5,5),*pb;       Derived obj(1,2,3,4);       pb=&obj;       pb->disp();       return 0;    }    执行程序后的输出结果是(   )。

选项 A、1,2
B、3,4
C、2,3
D、5,5

答案1

解析 本题考核基类指针的使用。本题首先定义了一个基类Base和一个由Base派生出来的派生类Derived。在主函数中,定义了一个基类Base指针pb和基类对象 b,还定义了派生类Derived的对象obj。然后将派生类对象obj的地址赋值给指向基类Base的指针pb。由于Derived是Base的子类型,因此允许上述赋值,但这时指针pb只能使用从基类Base继承的成员,即当pb指向obj对象时,pb->disp还是调用基类Base的成员函数disp。所以程序最后输出的对象d中对基类成员的初始化值,即1,2。
转载请注明原文地址:https://jikaoti.com/ti/MyW0FFFM
0

最新回复(0)