鱼C论坛

 找回密码
 立即注册
查看: 611|回复: 7

[已解决]关于c++重载

[复制链接]
发表于 2021-7-28 10:11:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神:
        这两天看了小甲鱼的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类型呢? 请各位大神解惑,万分感激
最佳答案
2021-7-28 21:34:16
不是 构造函数重载
是调用了构造函数

调用构造函数创建一个对象,然后返回创建的这个对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-28 14:41:13 | 显示全部楼层
这个是成员函数,复数加法,不是构造函数哦
Complex Complex 中的第一个Complex 是代表返回值类型,第二个是函数名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-28 21:34:16 | 显示全部楼层    本楼为最佳答案   
不是 构造函数重载
是调用了构造函数

调用构造函数创建一个对象,然后返回创建的这个对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 出来,成为 重载运算符"+" 的返回值  是这个意思吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-28 23:24:55 | 显示全部楼层
chenfantech 发表于 2021-7-28 23:20
return Complex(real + c2.real, imag + c2.imag);

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-29 09:17:31 | 显示全部楼层
chenfantech 发表于 2021-7-28 17:24
类名是Complex,成员函数名不能和类名一致呀

下面是视频的源码

哦哦,谢谢你,嘻嘻。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 20:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表