首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个函数重载有关问题

2013-11-15 
【求助】一个函数重载问题请教个问题,一个类的2个类方法声明为double & operator[](int i)double operator[

【求助】一个函数重载问题
请教个问题,一个类的2个类方法声明为
double & operator[](int i);
double operator[](int i) const;
为什么没有产生重定义错误?


比如
class Student 
{
....
public:
double & operator[](int i);
double operator[](int i) const;
...
};


Student ada[3];


ada[1] = ada[3];
会不会产生二义性?
不明白,,,,,,,,
[解决办法]
不会,const方法只能从const方法里调用。
double operator[](int i) const
[解决办法]
double & operator[](Student *this,int i);

double operator[](const Student * const this,int i);

it's different
[解决办法]

引用:
double & operator[](Student *this,int i);

double operator[](const Student * const this,int i);

it's different

此处说错了吧,double& operator[](Student * const this,int i);
[解决办法]
我个人感觉这也是c函数的一个弊端
[解决办法]
两个函数的签名不同,编译器认为是两个不同函数,在具体调用哪一个时,编译器有个算法会找到最匹配的一个。

你的例子中,对ada[3]来说,const的那个显然更匹配,而对ada[1]来说,只能匹配非const的那个。
[解决办法]
const与非const是可以重载的,没有歧义。

const对象会调用const版本并仅限于const版本,非const对象会优先调用非const版本但不限于非const版本。

热点排行