怎样使重载的[]运算符也能区分开const和非const的引用?
我在写一个通用的多项式模板Polynomial <C> ,多项式系数可以是不同的数据类型,作为模板参数C给出.
我重载了[]运算符,使[i]能返回第i个系数,并且当i越界时可以抛出异常. 显然operator[] (int i) 应该以引用方式返回,使得poly[i]可以作为左值;
然后我要重载operator+, 函数原型是friend Polynomial <C> & operator+ (const Polynomial <C> & p1, const Polynomial <C> & p2). 因为加法不应该对被加的两个多项式进行改变,所以以const方式传递参数是理所当然的.
那么现在问题就是: 在operator+ 方法的实现里我想要用p[i]=p1[i]+p2[i]这样的形式来对对应项系数相加, 但operator[]返回的是一个非const的引用,这样作为参数的p1和p2又不能以const方式传递. 这个矛盾该怎么解决呢?
[解决办法]
第一,你可以同时提供cosnt的[]和非const的[]重载
第二,你为什么一定要在operator+里使用[]呢?都friend了,直接用和[]里相同的代码来获得数据即可。