数组下标运算符[]通常用于访问、修改一个对象中的数据域或者元素。而现在,我们希望它的功能是:访问有理数(C++ 有理数类)的分子和分母。
首先我们在Rational.h文件的public中添加:
int operator[](int index);
然后在Rational.cpp文件中实现函数:
int Rational::operator[](int index) {
//若为0,则返回分子;否则,返回分母
if (index == 0) {
return this->numerator;
} else {
return this->denominator;
}
}
我们测试一下结果:
#include <iostream>
#include "Rational.h"
using namespace std;
int main()
{
Rational r1(4, 2);
Rational r2(2, 3);
cout << r1[0] << "/" << r1[1] << endl;
cout << r2[0] << "/" << r2[1] << endl;
return 0;
}
可以看到,我们重载的运算符实现了正常的功能。
但我们想要像修改数组元素一样修改分子或分母,是否可行呢?
假如我么想要把r1的分子修改成3,分母修改成2。测试一下:
r1[0] = 3;
r1[1] = 2;
发现编译器报错了。大概意思是运算符不能在左值的一边。
为什么呢?
这是因为我们要修改的值的地址,和分子或分母的地址不同。那么怎么样实现赋值操作呢?
这就用到了我们之前说到的引用返回(C++ 引用返回)。
也就是说,为函数签名
int Rational::operator[](int index)
加上符号“&”,变为
int& Rational::operator[](int index)
就可以了。
我们来测试一下:
#include <iostream>
#include "Rational.h"
using namespace std;
int main()
{
Rational r1(4, 2);
Rational r2(2, 3);
r1[0] = 3;
r1[1] = 2;
cout << r1[0] << "/" << r1[1] << endl;
cout << r2[0] << "/" << r2[1] << endl;
return 0;
}
原文链接: https://www.cnblogs.com/bwjblogs/p/12989556.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/198104
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!