【发布时间】:2012-05-08 10:52:06
【问题描述】:
class MyClass;
int main()
{
float a = 5;
MyClass c1;
MyClass c2 = a*c1;
MyClass c3 = c1*a;
}
如何重载乘法运算符以使 a*c1 和 c1*a 都能工作?
【问题讨论】:
-
MyClass有哪些构造函数?是否可以从float隐式转换?
class MyClass;
int main()
{
float a = 5;
MyClass c1;
MyClass c2 = a*c1;
MyClass c3 = c1*a;
}
如何重载乘法运算符以使 a*c1 和 c1*a 都能工作?
【问题讨论】:
MyClass 有哪些构造函数?是否可以从float 隐式转换?
像这样:
MyClass operator* (float x, const MyClass& y)
{
//...
}
MyClass operator* (const MyClass& y, float x)
{
//...
}
第二个也可以是成员函数:
class MyClass
{
//...
MyClass operator* (float x);
};
前 2 个选项用作类范围之外的声明。
【讨论】:
MyClass 是用户定义的。所以你可以定义operator +(int, const MyClass&),但你不能重新定义operator +(int,int)。
this 是一个隐式参数,所以它仍然是一个二元运算符。前 2 个选项用作类范围之外的声明。
inline