关于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类型呢? 请各位大神解惑,万分感激 这个是成员函数,复数加法,不是构造函数哦
Complex Complex 中的第一个Complex 是代表返回值类型,第二个是函数名 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;
}
不是 构造函数重载
是调用了构造函数
调用构造函数创建一个对象,然后返回创建的这个对象
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;
} 人造人 发表于 2021-7-28 21:34
不是 构造函数重载
是调用了构造函数
return Complex(real + c2.real, imag + c2.imag);
这句话我按c语言理解 return一个 函数的返回值,但是构造函数没有返回值,所以在这里产生了疑问
那您的意思是 Complex(real + c2.real, imag + c2.imag); 这个创建了一个 Complex类的对象,然后 return 出来,成为 重载运算符"+" 的返回值是这个意思吧? chenfantech 发表于 2021-7-28 23:20
return Complex(real + c2.real, imag + c2.imag);
这句话我按c语言理解 return一个 函数的返回值, ...
对 chenfantech 发表于 2021-7-28 17:24
类名是Complex,成员函数名不能和类名一致呀
下面是视频的源码
哦哦,谢谢你,嘻嘻。
页:
[1]