C++构造函数的重载

构造函数的重载与普通函数的重载基本相同,下面附代码

#include

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;出错;

猜你喜欢

转载自blog.csdn.net/Strengthennn/article/details/80002499