有如下程序: #include<iostream> #include<string> using namespace std; class Bedroom{ public: Bedroom(int s=12):size(s){cout<<size;} pr

admin2021-07-02  20

问题 有如下程序:
#include<iostream>
#include<string>
using namespace std;
class Bedroom{
public:
Bedroom(int s=12):size(s){cout<<size;}
private:
int size;
};
class Apartment{
public:
Apartment(int s1,int s2,int s3):b2(s2),b1(s1),size(s3){cout<<size;}
private:
int size;
Bedroom b1,b2;
};
int main(){
Apartment*p=new Apartment(12,18,75);
delete p;
return0:
}
运行时的输出结果是(    )。

选项 A、121875
B、181275
C、751218
D、751812

答案A

解析 C++的构造函数初始化列表中,成员被初始化的次序就是定义成员的次序。main()函数中,使用new运算符构造Apartment类的对象,将构造的对象指针赋给p指针;在构造Apartment对象时,由于Apartment类的成员定义顺序为:size、b1、b2,Apartment对象的构造过程为:
①初始化列表中首先初始化size为s3(75)。
②初始化b1,调用Bedroom构造函数,使用参数s1(12),初始化b1对象中的size,然后执行Bedroom构造函数的函数体,输出b1.size(12)。
③最后初始化b2,调用Bedroom构造函数,使用参数s2(18),初始化b2对象中的size,再执行函数体,输出b2.size(18)。
④等Apartment对象的初始化列表执行结束后,再执行Apartment类的构造函数体,输出A。partment对象中的size(75)。
综上程序输出:121875。本题答案为A选项。
转载请注明原文地址:https://jikaoti.com/ti/7uh0FFFM
0

最新回复(0)