gpt4 book ai didi

c++ - 在 C++ 中正确重载 +

转载 作者:太空宇宙 更新时间:2023-11-04 15:06:08 26 4
gpt4 key购买 nike

我创建了代表行 aX + bY = c 的类,我希望重载 + 运算符来提高行(返回更高的行,所以我在下面做了,但是编译器说 invalid use of this

class Linia{
public:
double a,b,c;
Linia (double a, double b, double c){
this->a = a;
this->b = b;
this->c = c;
}
friend Linia operator+ (double i){
return new Linia(a, this->b, this->c + i/this->b);
}
};

我想返回新的 Linia 对象,它具有如上所示的字段 iint 我不想修改原始对象

最佳答案

你有一些基本的语法问题。

  • this 是一个指针,因此您需要使用 -> 取消引用它。

  • 我假设你的意思是 this->c + i.c 而不是 this->c + i

  • 您不需要(而且可能不应该)让接线员成为您的 friend 。

  • 返回新实例的运算符(如 operator+)应该按值返回,而不是在堆上分配。

  • 运算符通常将参数作为 const 引用(因为您不应该修改操作数)。

我想你的意思是这样的:

class Linia{
public:
double a,b,c;
Linia (double a, double b, double c){
this->a = a;
this->b = b;
this->c = c;
}
Linia operator+ (const Linia& i){
return Linia(this->a, this->b, this->c + i.c / this->b);
}
};

你可以把它清理成这样:

class Linia{
public:
double a,b,c;
Linia (double a, double b, double c)
: a(a), b(b), c(c)
{ }

Linia operator+ (const Linia& i){
return Linia(a, b, c + i.c / b);
}
};

关于c++ - 在 C++ 中正确重载 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com