C++ =运算符重载和构造函数重载的区分

构造函数重载

//例子来源于友学网1533
class Complex{
public:
    Complex(double re, double im);   
    Complex(double re);
    //Complex operator=(double re);
};
Complex::Complex(double re, double im){
    _re = re;
    _im = im;
}
Complex::Complex(double re){
    _re = re;
    _im = 0.0;
}

为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同
上面的例子中,如果初始化使用一个实数,那么会调用第二个构造函数

区分初始化和赋值

    Complex c1(3, 5); // 用复数3+5i初始化c1 
    Complex c2=4.5; // 用实数4.5初始化c2 

关键的问题在于第二行
虽然这是一个 = 但是这个语句是C2的初始化而不是赋值
因此以下两句是等价的

    Complex c2=4.5;
    Complex c2(4.5);  

所以说,区分好初始化赋值语句是很重要的,因为所有的初始化都是对于构造函数的编写,而赋值语句则是对于 = 的运算符重载

你可能感兴趣的:(C++)