修饰只有一个参数的类构造函数。
没有explicit修饰的构造函数是隐式构造函数,被explicit修饰的是显式构造函数。相反的implicit修饰的是隐式构造函数。
什么是显式构造和隐式构造呢?
先说隐式构造函数:
class A {
private :
int a;
char b;
public :
A (int _a) { // 一号函数
a = _a;
}
A (char c) { // 二号函数
b = c;
}
};
int main ()
{
A class1 (12); // 此处调用的是一号函数
A class2 ('c'); // 此处调用的还是一号函数
}
上述代码中不同的初始化方法,调用的是相同的构造函数。
class A {
int a;
char b;
public :
explicit A (int _a) {
a = _a;
}
A (char _b) { // 二号
b = _b;
}
};
int main ()
{
A class1 (3); // 这样没有问题,显式构造函数就是这个
A class2 ('g'); // 这样也可以,调用了二号函数
}
实验结果如下:
#include <iostream>
using namespace std;
class A {
int a;
char b;
public :
A (int _a) {
a = _a;
}
B (char _b) {
b = _b;
cout << "Sdadsad: " << _b << endl;
}
int ret1 () {return a;}
char ret2 () {return b;}
};
class B {
int a;
char b;
public :
explicit B (int _a) {
a = _a;
}
B (char _b) {
b = _b;
}
int ret1 () {return a;}
char ret2 () {return b;}
};
int main ()
{
A class1 (12);
A class2 ('P');
cout << class1.ret1 () << endl;
cout << class1.ret2 () << endl;
cout << class2.ret1 () << endl;
cout << class2.ret2 () << endl << endl;
B class3 (3);
B class4 ('h');
cout << class3.ret1 () << endl;
cout << class3.ret2 () << endl;
cout << class4.ret1 () << endl;
cout << class4.ret2 () << endl << endl;
return 0;
}