有如下程序    #include <iostream>    using namespace std;    class Base {    protected:       Base( ){cout<<’A’; }       Base(char c)

admin2017-10-17  19

问题 有如下程序    #include <iostream>    using namespace std;    class Base {    protected:       Base( ){cout<<’A’; }       Base(char c) { cout<<c; }    };    class Derived: public Base {    public:       Derived(char c){ cout<<c; }    };    int main( ){        Derived d1 (’B’);        return 0;    }    执行这个程序屏幕上将显示输出

选项 A、B
B、BA
C、AB
D、BB

答案C

解析 本题考查的是派生类对象的构造。建立派生类对象时,构造函数的执行顺序如下:
   (1) 执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右):
   (2) 执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下):
   (3) 执行派生类的构造函数。
   所以本题在建立派生类Derived的对象d1时会先调用基类Base的构造,由于派生类中没有通过初始化列表显式构造基类对象,所以调用的是基类的默认构造函数,会输出一个’A’。然后调用自身的构造函数,输出传入的构造参数’B’。故程序输出的结果是:AB。所以应该选择C。
转载请注明原文地址:https://jikaoti.com/ti/vnt0FFFM
0

最新回复(0)