C++运算符重载中()的理解有点问题。

来源:百度知道 编辑:UC知道 时间:2024/05/28 01:48:44
#include<iostream.h>
class CArray
{
private:
int row,cols;
double *element;
public:
CArray(int r, int c)
{
rows=r;cols=c;
element=new double[r*c];
}
~CArray()
{
delete[]element;
}
double &operator()(int, int);
};
double &CArray::operator()(int r, int c)
{
return *(element+(r-1)*cols+c-1);
}
void main()
{
CArry a(3,4);
int i,j;
for(i=1;i<=3;i++)
for(j=1;j<=4;j++)
a(i,j)=i*j;
for(i=1;i<=3;i++)
{
for(j=1;j<=4;j++)
cout<<a(i,j)<<" ";
cout<<endl;
}
}

这个程序如果没有加() 符的重载我就懂了。可惜他加了。请问
double &CArray::operator()(int r, int c)
{
return *(element+(r-1)*cols+c-1);

返回的是什么啊,怎么搞的。。还是我的问题出在哪里了?

一级啊,想学的多,呵呵

它是在重载()操作符
如果CArray array;
array(r, c)
它就会运行。
返回的是double型的引用
有点像double d[10][10];
然后d[i][j];
一般我们不这样,而是另建一个函数Item(int r, intc)
不过调用就变成array.Item(r, c)了,没有上面方便,但更清晰

明白了就加分啊,我今天要升级。