我有一个名为Coord的类......它有实例数据x,y.我想覆盖*运算符,以便*运算符可用于将Coord乘以整数或双精度!这是我提出的解决方案:
Coord& Coord::operator*(int n)
{
this->x = this->x*n;
this->y = this->y*n;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理 - 我已经测试了一些来自main的打印输出......唯一的问题是......我从-Weffc ++标志得到警告!它说我的函数应该按值返回!我知道这个标志对应于"有效的C++"一书,但我手头没有副本 - 这本书的内容是什么?什么是通过价值?
只是详细说明Grizzly的评论......这不是就地增殖.因此,您应该将其声明为const以明确地防止:
Coord Coord::operator*(int n) const {
Coord c(*this);
c.x *= n;
c.y *= n;
return c;
}
Run Code Online (Sandbox Code Playgroud)
或者如果你有一个有用的构造函数:
Coord Coord::operator*(int n) const {
return Coord(x*n, y*n);
}
Run Code Online (Sandbox Code Playgroud)
就地乘法是不同的(和非常数):
Coord& Coord::operator*=(int n) {
x *= n;
y *= n;
return *this;
}
Run Code Online (Sandbox Code Playgroud)