读书人

为什么重载运算符的函数要用const解决

发布时间: 2012-04-09 13:41:25 作者: rapoo

为什么重载运算符的函数要用const
比如说重载 > < 我先声明重载 > 号的函数 然后直接在类中内联重载<号的 函数 这个函数中用到>
如果>号重载函数声明为const 则没问题 但是不声明为const 就会报错 报错内容就如没有重载直接用>去比较两个对象一样

还有另外一个问题 就是重载 == 和 != 和上面的一样重载==函数先声明 !=重载函数直接内联 但是这次 声明==重载函数就不需要为const 了 为什么
以下是代码
bool operator==(const RationalNumber &);
bool operator<(const RationalNumber &)const;

bool operator>(const RationalNumber &ration)
{
return (ration < *this);
}

bool operator!=(const RationalNumber &ration)
{
return !(*this == ration);
}


[解决办法]
没有加 const 的函数不能在 const 对象上使用.
为了让你的函数能够在更多的情况下正常使用, 你最好对所有不会修改对象的函数加 const
[解决办法]
第一,重载运算符不必须const

第二,之所以编译器说你不加上const不行,是因为你让一个const对象调用了你重载的这个运算符
bool operator>(const RationalNumber &ration)
return (ration < *this);
ration对象被你声明为const对象,它只能调用const函数(包括重载运算符)
[解决办法]
使用const是一种好习惯,对于运算符重载你的操作如果不需要改变对象的值就加上const 对数据进行加固。这样做更安全。在大的工程项目里面其效果比较明显。在调用的时候const对象只能调用const成员。而非const可以调用const成员也可以调用非const 所以在对象调用的时候并没有什么影响。

读书人网 >C++

热点推荐