Dědění a polymorfismus
Mam třídy:
class Matrix {
public:
Matrix operator+(const Matrix & secondMatrix) const;
}
a
class RegularMatrix : public Matrix ...
Jestli tomu dobře rozumím, tak operator+ má funguvat tak, že vytvoří nový objekt, sečte *this a secondMatrix a výsledek uloží do nově vytvořeného objektu, který vrátí.
Napadlo mě, že matice se sčítají všechny stejně, ať už je regulární nebo ne. Jenže co mám vracet? Když vrátím Matrix *, tak mi při operaci a = b + c + d; nastane memleak, protože při operaci b+c vytvořím na haldě objekt, kterej nikdo neuvolní. Vracet Matrix & nelze protože nemůžu vracet referenci na dočasný objekt a když vrátím Matrix, tak mi to při sčítání RegularMatrix a RegularMatrix vrací pouze Matrix. To je také špatně, protože přijdu o metody determinantu a inverze.
Jediné řešení, které mě napadlo, je napsat vlastní operator+ pro RegularMatrix, který bohužel bude obsahovat stejný kód, ale s jinou návratovou hodnotou.
Jaké řešení je správné?