Jag skulle vilja kunna överlagra operator() så att man ska kunna göra det här i main() : För att det ska fungera med M(0, 1)=3 så måste operator-funktionen returnera en referens till MatrixEntry. Men se till att du skapar en const-deklarerad operator() där du inte returnerar en referens (mao som du gör i ditt exempel).Överlagring operator(), inkl fungerande Lvalue
int main()
{
int row=2;
int col=2;
//M initieras till en dynamisk allokerad matris med 2 rader & 2 kollumner.
Matrix M(row, col);
//detta fungerar: int svar=M(0, 1);
//men jag skulle även vilja att denna sats fungerar:
M(0, 1)=3;
//Vet någon hur man ska koda så att operator() - fungerar i båda fallen?
return 0;
}
.H filern ser ut så här:
#ifndef _MATRIX_H_
#define _MATRIX_H_
typedef int MatrixEntry;
typedef enum {ZERO, IDENTITY, RANDOM} InitTyp;
class Matrix
{
private:
int size_col;
int size_row;
MatrixEntry **matris;
public:
Matrix();
Matrix(const int row, const int collumn, const InitTyp elm);
........
MatrixEntry operator()(const int row, const int collumn);
};
#endif
I .CPP:
MatrixEntry Matrix::operator()(const int row, const int collumn)
{
return matris[row][collumn];
}
Matrix::Matrix(const int row, const int collumn, const InitTyp elm)
{
size_row=row;
size_col=collumn;
matris=new MatrixEntry*[size_row];
for(int r=0; r<size_row; r++)
matris[r]=new MatrixEntry[size_col];
if(elm==ZERO)
{
for(int y=0; y<size_row; y++)
for(int x=0; x<size_col; x++)
matris[y][x]=0;
}
else if(elm==IDENTITY)
{
MatrixEntry value;
for(int y=0; y<size_row; y++)
for(int x=0; x<size_col; x++)
{
cout<<"Element Y[" <<y <<"]-X[" <<x <<"] får värdet: _\b";
cin>>value;
matris[y][x]=value;
}
}
else if(elm==RANDOM)
{
srand(time(NULL)); //initiering av slumpgeneratorn
for(int y=0; y<size_row; y++)
for(int x=0; x<size_col; x++)
matris[y][x]=rand()%21-10; //slumpa mellan -10 till +10
}
else
{
cout<<"Varning!\n Endast dessa ental finns som alternativ:\n"
<<"0=Alla element får talet noll, 1=Ange själv elementens värden\n"
<<" och 2=Elemntens värden slumpas ut.\n";
delete [] matris;
}
}Sv: Överlagring operator(), inkl fungerande Lvalue
MatrixEntry& operator()(const int row, const int collumn);
MatrixEntry operator()(const int row, const int collumn) const;
Du ska ha exakt samma kod i båda funktionerna.