【求助】一个函数重载问题
请教个问题,一个类的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 * const this,int i);
[解决办法]
我个人感觉这也是c函数的一个弊端
[解决办法]
两个函数的签名不同,编译器认为是两个不同函数,在具体调用哪一个时,编译器有个算法会找到最匹配的一个。
你的例子中,对ada[3]来说,const的那个显然更匹配,而对ada[1]来说,只能匹配非const的那个。
[解决办法]
const与非const是可以重载的,没有歧义。
const对象会调用const版本并仅限于const版本,非const对象会优先调用非const版本但不限于非const版本。