读书人

c++的运算符重载解决方法

发布时间: 2013-11-15 22:28:15 作者: rapoo

c++的运算符重载
本帖最后由 mengxix 于 2013-10-29 16:24:59 编辑 假如我CRGB类里定义的×运算符重载是这样
CRGB operator *(double k,CRGB &c1)
{
CRGB c;
c.red=k*c1.red;
}
那么我在使用的时候可不可以是
p.c.red*255,可以把double的k和CRGB交换位置吗?

菜鸟问问题没深浅,大神包含
[解决办法]
不可以,需要对不同的顺序分别进行重载

这是很显然的,你重载的是*,可以交换,但如果是-或者/之类的呢?
[解决办法]
不可以,重载的话有两种,一种是friend友元,还有一种是成员
友元的话,第一参数是第一操作数,第二参数就是第二操作数,比如 A * B,A是第一参数,B是第二参数
成员的话,第一操作数是类本身,参数是第二操作数

匹配的时候都是按顺序匹配的,如果没有定义就是错的,你可以利用重载重新,多定义几个版本。比如:

CRGB operator *(CRGB &c1,double k)
{
return k*c1;
}

[解决办法]
CRGB operator *(double k,CRGB &c1);
CRGB operator *(CRGB &c1,double k);

这样重载即可不用关心操作数的顺序了
[解决办法]
建议对称运算符使用友元重载方式,

读书人网 >C++

热点推荐