• 4340阅读
  • 6回复

[提问]重载运算符->问题 [复制链接]

上一主题 下一主题
离线tangbao203
 

只看楼主 倒序阅读 楼主  发表于: 2012-07-20
QString operator->(const QString &key) const;
为什么编译通过不了????

错误信息:error: 'QString NConfiguration::operator->(const QString&) const' must take 'void';
太奇怪了,难道不允许有参数.
离线jdwx

只看该作者 1楼 发表于: 2012-07-20
回 楼主(tangbao203) 的帖子
->也能重载吗?
->和.是一个意思,. 不能重载。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ppdayz

只看该作者 2楼 发表于: 2012-07-20
...->重载了做什么。。。
离线ppdayz

只看该作者 3楼 发表于: 2012-07-21
回 1楼(jdwx) 的帖子
一、重载规则
I.可以重载的操作符
+ - * / %
^ & | ~ !
= > < += -=
*= /= %= ^= &=
|= >> << >>= <<=
== != >= <= &&
|| ++ -- ->* ,
-> [] () operator new operator new[]
operator delete operator delete []

II.不能重载的操作符
:: . .* ? :  
sizeof typeid new delete
static_cast dynamic_cast const_cast reinterpret_cast

III.基本规则
1.一元操作符可以是不带参数的成员函数[1] 或带一个参数的非成员函数[1]。
2.二元操作符可以是带一个参数的成员函数[1]或带两个参数的 非成员函数[1]。
3.operator=、operator[]、operator()、operator->只能定义为成员函数[1]。
4.operator->的返回值必须是一个指针或能使用->的对象。
5.重载 operator++ 和 operator-- 时带一个 int 参数表示后缀,不带参数表示前缀。
6.除 operator new 和 operator delete 外,重载的操作符参数中至少要有一个非内建数据类型。
7.x@y 搜索范围为:x 成员函数--> 全局函数/X所在名字空间中的函数/Y所在名字空间中的函数/X的友元函数/Y的友元函数。
8.重载的的操作符应尽量模拟操作符对内建类型的行为。
离线ppdayz

只看该作者 4楼 发表于: 2012-07-21
回 楼主(tangbao203) 的帖子
Coca* Carrot::operator->()
{
    ...
}


【注】1. 重载 operator-> 应提供 const 版和非 const 版.
         2. operator-> 的返回值必须为一个指针或可以应用 -> 操作的类型.
         3. 如果 operator-> 的返回的不是一个指针, C++ 会继续在返回类型上应用 -> 直到得到一个指针为止.
· const Coca* Carrot::operator->() const


离线tangbao203

只看该作者 5楼 发表于: 2012-07-21
回 4楼(ppdayz) 的帖子
谢谢,好详细哦.   受教了...
离线jdwx

只看该作者 6楼 发表于: 2012-07-21
一直以为->不可重载!基础没学好!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个