C++中如何实现符号的特殊重载

怎么样可以实现像ADO智能指针那样的效果。后面跟"->"可以出现相应的函数和变量。"."也可以出现响应的函数和变量。例如有一个类型为varclass;实现效果如下varc... 怎么样可以实现像ADO智能指针那样的效果。后面跟"->"可以出现相应的函数和变量。"."也可以出现响应的函数和变量。
例如有一个类型为varclass;
实现效果如下
varclass var;
var.GetA();
var->GetB();
感觉是利用宏实现的。
展开
 我来答
寻森良Z
推荐于2016-07-08 · TA获得超过368个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:129万
展开全部

大部分可以重载,例如:

算术运算符:+,-,*,/,%,++,--;

位操作运算符:&,|,~,^,<<,>>

逻辑运算符:!,&&,||;

比较运算符:<,>,>=,<=,==,!=;

赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;

其他运算符:[],(),->,,(逗号运算符),new,delete,new[],delete[],->*。


不允许重载的有:

分量运算符 点号

成员对象选择 点星号

作用域解析 双冒号

条件运算符 问号冒号

.,.*,::,?:


下面是一个重载“->”的例子程序。

#include "iostream"
using namespace std;
class Data
{
public:
void Get(){
cout << "Data::Get" << endl;
}
};
class Test
{
Data *p;
public:
Data * operator ->(){
cout << "Test -> Data" << endl;
return p;
}
};
int main()
{
Test t;
t->Get();
return 0;
}
追问
你说的我都知道。举个例子吧。看题。
追答
点号不能重载,如果需要点号访问,你必须在你的varclass类里面定义你需要的每个函数。

->虽然能够重载,但也仅仅是将一个类对象转换成另一个类指针来访问。
当你已经有了点号访问的各个函数了,只需将->重载为返回this指针就可以实现->的功能了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式