chenfantech 发表于 2021-7-28 10:11:57

关于c++重载

各位大神:
        这两天看了小甲鱼的c++教程,看了里面的运算符重载这个章节



Complex Complex::operator+(Complex &d)
{
        Complex c;

        c.real = real + d.real;
        c.imag = imag + d.imag;

        return c;
}

可以写成

Complex Complex::operator+(Complex &2)
{
    return Complex(real + c2.real, imag + c2.imag);
}

这里这个表达式怎么解释? 是用了构造函数重载吗? 构造函数不是没有返回值吗,怎么返回Complex类型呢? 请各位大神解惑,万分感激

starry~~ 发表于 2021-7-28 14:41:13

这个是成员函数,复数加法,不是构造函数哦
Complex Complex 中的第一个Complex 是代表返回值类型,第二个是函数名

chenfantech 发表于 2021-7-28 17:24:42

starry~~ 发表于 2021-7-28 14:41
这个是成员函数,复数加法,不是构造函数哦
Complex Complex 中的第一个Complex 是代表返回值类型,第二 ...

类名是Complex,成员函数名不能和类名一致呀

下面是视频的源码

class Complex
{
public:
        Complex();
        Complex(double r, double i);//带参数的构造函数
        Complex operator+(Complex &d);//运算符重载,返回类型最好就是类的类型,
                                                                      //不要用int
        void print();

private:
        double real;
        double imag;
};

Complex::Complex()
{
        real = 0;
        imag = 0;
}

Complex::Complex(double r, double i)
{
        real = r;
        imag = i;
}

Complex Complex::operator+(Complex &d)
{
        Complex c;

        c.real = real + d.real;   
                                                          
        c.imag = imag + d.imag;

        return c;
}

void Complex::print()
{
        cout << "(" << real << "," << imag << "i)\n";
}

int main()
{
        Complex c1(3, 4), c2(5, -10), c3;
       
        c3 = c1 + c2;    //加号已被重载

        cout << "c1 = ";
        c1.print();
        cout << "c2 = ";
        c2.print();
        cout << "c1 + c2 = ";
        c3.print();

        return 0;
}

人造人 发表于 2021-7-28 21:34:16

不是 构造函数重载
是调用了构造函数

调用构造函数创建一个对象,然后返回创建的这个对象

人造人 发表于 2021-7-28 21:37:00

Complex Complex::operator+(Complex &2)
{
    return Complex(real + c2.real, imag + c2.imag);    // 这个分号是中文的
}
Complex Complex::operator+(Complex &2)
{
    Complex c = Complex(real + c2.real, imag + c2.imag);// 这个分号是中文的
    return c;
}

chenfantech 发表于 2021-7-28 23:20:25

人造人 发表于 2021-7-28 21:34
不是 构造函数重载
是调用了构造函数



return Complex(real + c2.real, imag + c2.imag);

这句话我按c语言理解 return一个 函数的返回值,但是构造函数没有返回值,所以在这里产生了疑问

那您的意思是 Complex(real + c2.real, imag + c2.imag); 这个创建了一个 Complex类的对象,然后 return 出来,成为 重载运算符"+" 的返回值是这个意思吧?

人造人 发表于 2021-7-28 23:24:55

chenfantech 发表于 2021-7-28 23:20
return Complex(real + c2.real, imag + c2.imag);

这句话我按c语言理解 return一个 函数的返回值, ...

starry~~ 发表于 2021-7-29 09:17:31

chenfantech 发表于 2021-7-28 17:24
类名是Complex,成员函数名不能和类名一致呀

下面是视频的源码


哦哦,谢谢你,嘻嘻。
页: [1]
查看完整版本: 关于c++重载