2013-04-10 97 views
0

说我有一个int,像这样:C++重载`-`运营商(如`* -1`)

int foo = 5; 

然后我可以这样做:

int bar = -foo;  // -5 

我想成为能够对我的班级做同样的事情,那么我如何超载-运营商,用作* -1?我是否必须超载*运营商才能这样做?

+0

我不明白'-'和'*'必须互相做什么。 – 2013-04-10 18:17:38

+0

把它想象成'0 - foo',而不是'foo * -1'。 – 2013-04-10 18:17:59

+0

@詹姆斯麦克劳林啊,这让我明白了提问者的意思。 – 2013-04-10 18:18:28

回答

4
class MyClass 
{ 
    friend MyClass operator-(const MyClass& x); 
}; 

class MyClass 
{ 
    MyClass operator-() const; 
}; 

任你选(虽然我会去的第一个)。

+0

哇,这很简单!一旦我可以验证它的工作,我会接受它。 – MiJyn 2013-04-10 18:19:03

+2

除非'-'运算符不需要访问'MyClass'的'protected'或'private'部分,否则我会选择'MyClass operator' (const MyClass & x);''我更愿意尽可能避免'朋友' – 2013-04-10 18:21:22

+1

@MikeDeSimone如果可能的话,全局非朋友函数当然是最好的,我把朋友放在这里只是为了强调这个选项不涉及成员函数 – john 2013-04-10 18:22:33