有如下程序: #inelude<iostream> class A { public: A(int n=0):m_n(n) { std::cout<<’d’; } A(const A& a):m_n(a.m_n) { std::cout<<’c’; } p

admin2021-02-22  34

问题 有如下程序:
#inelude<iostream>
class A
{
public:
A(int n=0):m_n(n)
{
std::cout<<’d’;
}
A(const A& a):m_n(a.m_n)
{
std::cout<<’c’;
}
private:
int m_n;
};
int main()
{
A a(2),b;
const A c(a),&d=c,e=b;
b=d;
return0;
}
运行后的输出结果是(    )。

选项 A、ddcd
B、ddcc
C、ddccd
D、dddcc

答案B

解析 main()函数中,各个语句执行过程如下:
①A a(2)定义对象a,使用默认构造函数A(int n=0),使用参数2初始化m_n,即a.m_n=2,输出字符’d’;
②Ab定义对象b,使用默认构造函数A(int n=0),使用默认参数0初始化m_n,即b.m_n=0,输出字符’d’;
③const A c(a)定义对象c,使用A类的另一个构造函数A(const A&a),将c.m_n赋值为a.m_n,即c.m_n=2,输出字符’c’;
④const A &d=c定义对象d引用c对象,所以d、c是同一对象,没有构造函数的调用;
⑤const A e=b定义对象e,使用编译器的默认赋值运算符将b对象赋值给一个临时对象,然后使用构造函数A(const A &a)将临时对象赋给e,输出字符’c’;
⑥b=d使用编译器的默认赋值运算符将d对象赋给b,没有构造函数的调用。
综上,程序运行结果为:ddcc。故本题答案为B选项。
转载请注明原文地址:https://kaotiyun.com/show/57yp777K
0

最新回复(0)