构造函数的重载与普通函数的重载基本相同,代码如下:
#include <iostream>
using namespace std;
class MyClass{
private:
int data_1;
int data_2;
public:
myclass(int data1, int data2){
cout<<"调用两参数的构造函数"<<endl;
data_1 = data1;
data_2 = data2;
};
myclass(int data){
cout<<"调用一参数的构造函数"<<endl;
data_1 = data;
data_2 = -1;
}
myclass(){
cout<<"调用无参数的构造函数"<<endl;
data_1 = 0;
data_2 = 0;
};
void show(){
cout<<"data_1 = "<<data_1<<endl;
cout<<"data_2 = "<<data_2<<endl;
}
};
int main(){
myclass myclass_1(10, 20);
myclass_1.show();
myclass myclass_2(30);
myclass_2.show();
myclass myclass_3;
myclass_3.show();
return 0;
}
输出:
调用两参数的构造函数
data_1 = 10
data_2 = 20
调用一参数的构造函数
data_1 = 30
data_2 = -1
调用无参数的构造函数
data_1 = 0
data_2 = 0
需要注意的是:声明对象时如果需要调用无参数的构造函数正确写法应该是
myclass myclass4;
而不是
myclass myclass4();
这样编译器不会提示错误但如果之后又调用了对象myclass4的函数或数据就会出现
error: request for member ‘show’ in ‘myclass_3’, which is of non-class type ‘myclass()’
错误。
这是因为编译器将myclass myclass4()
看作一个返回值为class类型的函数的声明,该函数无任何参数。
但如果在赋值语句中显式的调用构造函数必须使用圆括号:
myclass4 = myclass();
正确;
而
myclass4 = myclass;
出错;