#include<iostream>
#include<string>
#include<vector>
using namespace std;
class B
{
private:
int data;
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(int i):data(i)
{
cout<<"constructed by parameter"<<data<<endl;
}
};
B Play(B b)
{
return b;
}
int main()
{
B temp=Play(5);
return 0;
}
(1)该程序的输出结果是什么?为什么会有这样的输出?
(2)B(int i):data(i),这种用法的专业术语叫什么?
(3)Play(5),形参类型是类,而5是个常量,这样写合法吗?为什么?
答案:(1)constructed by parameter5
destructed
destructed
(2)带参数的构造函数,冒号后面是成员变量初始化列表
(3)合法,单个参数的构造函数如果不添加explicit关键字,会定义一个隐含的类型转换(从参数的类型转换为自己);添加explicit关键字会消除这种隐含转换。