"Sim" <(EMail Removed)> wrote in message
news:3f49202f$(EMail Removed)...
> The topic seemed interesting so I gave it a try myself. I can't get my
> proxy class running. I get a number of errors when I do something like:
>
> matrixA[0][0] = 5.0;
>
> or std::cout << matrixA[0][0];
>
> I simply did a:
>
> const Proxy operator[](int i) const {
> return this>proxy[i];
> }
>
> Proxy operator[](int i) {
> return this>proxy[i];
> }
>
> and in proxy I did:
>
> double operator[](int j) const {
> return matrix>[j];
> }
> double& operator[](int j) {
> return matrix>[j];
> }
>
> and I had my twodim array in the proxy class:
>
> double **matrix;
>
>
> What am I doing wrong? Andre if you got it working could you help me out?
>
Well the two dim array is supposed to be in the Matrix class. The proxy
class just hold a reference to the matrix and the first index.
Something like this (untested code)
class Matrix;
class Proxy
{
friend class Matrix;
double& operator[](int j) { return m.matrix[i][j]; }
private:
Proxy(Matrix& mm, int ii) : m(mm), i(ii) {}
Matrix& m;
int i;
};
class Matrix
{
friend class Proxy;
public:
Proxy operator[](int i) { return Proxy(*this, i); }
private:
double** matrix;
};
Basically the Proxy class just holds the parameters used in the first
operator[] call, so that when the second operator[] call happens they are
available to get the element from the Matrix.
john
> thanks
>
> Sim
>
>
> Immanuel Albrecht wrote:
>
> > "John Harrison" <(EMail Removed)> wrote in
> > news:bib1jv$798kd$(EMail Removed)berlin.de:
> >
> >
> >>"Andre" <(EMail Removed)> wrote in message
> >>news:(EMail Removed)...
> >>
> >>>Hi,
> >>>
> >>>I have a class which contains a twodimensional array. I need to
> >>>overload something like the [][] operator so that I'm able to access
> >>>the internal array elements via the class object. For example:
> >>>
> >>>Matrix a = new Matrix(10,10);
> >>>
> >>>a[1][1] = 6;
> >>>
> >>>Is this possible? How can I simulate a two dimensional array using a
> >>>class in c++? Thanks
> >>>
> >>>Andre
> >>>
> >>
> >>There is no operator[][], there is only the operator[]. You can do
> >>what you want with a proxy class, something like this
> >>
> >>class Proxy
> >>{
> >>public:
> >> double operator[](int j) const;
> >
> > const double&
> >
> >> double& operator[](int j);
> >>};
> >>
> >>class Matrix
> >>{
> >>public:
> >> const Proxy operator[](int i) const;
> >
> > ^^^^^
> > const Proxy & and
> >
> >> Proxy operator[](int i);
> >
> > Proxy& will have better performance, plus, you can have the
> > proxyclass save a reference to your data matrixrow and I would make
this
> > class inside the Matrix namespace to avoid name collisions with other
> > Proxy classes for different multidimensional arrays.
> >
> >>};
> >
> >
> > References combined with inline functions will have improved
performance,
> > since there will be no copyconstructor and destructor calls, less
> > overhead.
>
