问题 单项选择题

有如下程序 #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。

单项选择题
问答题