Klasa listy przechowującej napisy jest częściowo zdefiniowana na poniższym listingu:
class lista
{
public:
lista();
lista(const string elem);
lista(const char * elem);
~lista();
void addElem(const string elem);
void addElem(const char * elem);
//brakujące prototypy operatorów << = ,
private:
int nElem;
string *txt;
};
Proszę o dodanie odpowiednich prototypów operatorów i zaimplementowanie metod klasy, tak, aby możliwe było wykonanie instrukcji jak na poniższym listingu:
int main(void)
{
string elem;
lista l;
l="aaa";
cout << l << endl; //zwraca "aaa"
l="bbb","sss","lll";
cout << l << endl; //zwraca "bbb","sss","lll"
l=l,"nnn","mmm";
cout << l << endl; //zwraca "bbb","sss","lll","nnn","mmm"
elem="ala ma kota";
l=elem;
cout << l << endl; //zwraca "ala ma kota"
l=l,elem,elem,"aaa";
cout << l << endl; //zwraca "ala ma kota","ala ma kota","ala ma kota","aaa"
}
Klasa dwuwymiarowej prostokątnej macierzy jest zdefiniowana na poniższym listingu:
class Matrix {
public:
Matrix (const short rows, const short cols);
~Matrix (void) {delete elems;}
double& operator () (const short row, const short col);
friend ostream& operator << (ostream&, Matrix&);
friend Matrix operator + (Matrix&, Matrix&);
friend Matrix operator - (Matrix&, Matrix&);
friend Matrix operator * (Matrix&, Matrix&);
private:
const short rows; // matrix rows
const short cols; // matrix columns
double *elems; // matrix elements
};
Do macierzy chcemy odwoływać się używając notacji jak w poniższych przykładach:
Matrix m(2,3);
m(1,1) = 10; m(1,2) = 20; m(1,3) = 30;
m(2,1) = 15; m(2,2) = 25; m(2,3) = 35;
cout << m << '\n';
//output
//10 20 30
//15 25 35
Proszę zaimplementować klasę Matrix.