C++中构造函数共有三种调用方法:
1.括号法:类名 对象名(参数)
2.显式调用:类名 对象名 = 类名(参数)
3.隐式调用 :类名 对象名 = 参数
#include <iostream>// 预处理命令
using namespace std; // 使用标准命名空间std
class A { //测试类
public:
A(int i = 1):num(i) {
cout << "构造" << endl;
}
A(A const& p) {
cout << "拷贝" << endl;
this->num = p.num;
}
int num;
};
void show(A temp) {
cout << temp.num << endl;
}
int main() {
A a;
//构造对象,默认num值为1
a = 10;
//构造 + 赋值,先构造匿名对象,num为10,再将值覆盖A,实际上是将10转换为A类型
//即a = A(10)
//该行执行完后,匿名对象自动释放
A b = 'a';
//构造,a在传入构造函数时,被强制类型转换为97再赋给num
show(20);
//20首先被强制类型转换为A类型,即构造匿名对象,相当于show(A temp = 20)
//即show(A temp = A(20))
return 0;
}
注:如果构造函数前加上关键字"explicit"进行修饰,则只能进行显式调用。另外,转换不允许多参数,也不允许间接转换。
博客为本人原创,如有错误欢迎指正!