有如下程序:    #include<iostream>    using namespace std;    class A    {    public:       A(int i) {x=i;}      void dispa() {cout<<x

admin2009-03-17  45

问题 有如下程序:    #include<iostream>    using namespace std;    class A    {    public:       A(int i) {x=i;}      void dispa() {cout<<x<<’,’;}    private:      int x;    };    class B: public A    {    public:      B(int i): A(i+10) {x=i;}      void dispb() (dispa(); cout<<x<<endl;}    private:      int x;    };    int main()    {      B b(2);      b.dispb();      return 0;    }运行时输出的结果是

选项 A、10,2
B、12,10
C、12,2
D、2,2

答案C

解析 本题考查的知识点是:派生类的构造。执行开始,进入main()函数。第1句是声明一个B类对象b,并传入构造参数2,所以执行进入B的构造函数B(int i),形参i为2。由于B继承自A,所以首先执行进入A的构造函数A(int,i),形参i为2+10=12。函数中只有一条语句x=i,此时的x为类A的私有成员x,被赋值为12。执行返回到 B的构造函数,也是同样一条语句x=i;,不过这里的x为类B的私有成员x,被赋值为2。至此b的构造完成。执行返回主函数第2行,通过刚创建的对象b调用其成员函数dispb()。执行进入dispb(),第1条语句是dispa();,这是基类A的公有成员函数,执行进入dispa(),只有一条输出语句,此时由于在基类A中,所以输出的x为A的成员变量x,因此输出结果是“12,”。执行返回dispb()函数的第2条语句,这里输出的x是派生类B的成员变量x,即接着输出的结果是“2”。执行返回到主函数第3行,此时是一条return语句,主函数结束,程序执行完毕。注意,如果类中还定义有析构函数的话,此时就会被执行。故本题应该选择C。
转载请注明原文地址:https://jikaoti.com/ti/cTW0FFFM
0

最新回复(0)