C++中如何实现符号的特殊重载
怎么样可以实现像ADO智能指针那样的效果。后面跟"->"可以出现相应的函数和变量。"."也可以出现响应的函数和变量。例如有一个类型为varclass;实现效果如下varc...
怎么样可以实现像ADO智能指针那样的效果。后面跟"->"可以出现相应的函数和变量。"."也可以出现响应的函数和变量。
例如有一个类型为varclass;
实现效果如下
varclass var;
var.GetA();
var->GetB();
感觉是利用宏实现的。 展开
例如有一个类型为varclass;
实现效果如下
varclass var;
var.GetA();
var->GetB();
感觉是利用宏实现的。 展开
1个回答
展开全部
大部分可以重载,例如:
算术运算符:+,-,*,/,%,++,--;
位操作运算符:&,|,~,^,<<,>>
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->,,(逗号运算符),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指针就可以实现->的功能了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询