simple c ++:如何重载乘法运算符,以便float*myClass和myClass*float工作

use*_*343 9 c++ operator-overloading

class MyClass;

int main()
{
  float a = 5;
  MyClass c1;
  MyClass c2 = a*c1;
  MyClass c3 = c1*a;
}
Run Code Online (Sandbox Code Playgroud)

如何重载乘法运算符以使*c1和c1*a都有效?

Luc*_*ore 21

像这样:

MyClass operator* (float x, const MyClass& y)
{
    //...
}

MyClass operator* (const MyClass& y, float x)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

第二个也可以是成员函数:

class MyClass
{
    //...
    MyClass operator* (float x);
};
Run Code Online (Sandbox Code Playgroud)

前两个选项用作类范围之外的声明.

  • @vaisakh,如果提供至少一个用户定义的类型,则可以重载任何二进制运算符。在这种情况下,“ MyClass”是用户定义的。因此,您可以定义`operator +(int,const MyClass&)`,但不能重新定义`operator +(int,int)`。 (2认同)
  • @Snowman你在类中声明它了吗?如果是这样,那么“this”是一个隐式参数,因此它仍然是一个二元运算符。前两个选项用作类范围之外的声明。 (2认同)