operator[]为什么得定义两个函数?
因为可能存在const对象,如果const对象调用这个函数
形参列表不同是无法调用的,必须使用带有const指针的函数,才会放心把成员变量的引用return 出去
仅凭this指针是没办法调用的
这是实例化const对象b之后,在cout处调用b[1][1]时编译报的错误
找不到const Matrix*类型的this指针,即必须有一个const修饰的对应的operator[]重载函数才行。
passing ‘const Matrix’ as ‘this’ argument discards qualifiers [-fpermissive]
cout << b[1][1] << endl;
#include <iostream>
#include <vector>
using namespace std;
class Matrix
{
public: //row、line为行 column为列
Matrix(int rows, int cols) : value_(rows)
{
//初始化每一行的列数
for (int i = 0; i < rows; i++)
value_[i].resize(cols);
}
vector<int>& operator[](int row)
{
return value_[row];
}
//operator[]
//rows
//cols
private:
vector<vector<int>> value_;
};
int main()
{
Matrix a(2,2);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
a[i][j] = i + j;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
cout << a[i][j] << " ";
cout << endl;
}
const Matrix b(a); //定义了一个const Matrix类型的对象
cout << b[1][1] << endl; //编译在做这一步的时候发生了报错。
return 0;
}