Loading [MathJax]/jax/input/TeX/config.js
Ask Your Question
0

Dědění a polymorfismus

asked May 14 '15

Petr Gondek gravatar image

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é?

add a comment

1 Answer

Sort by » oldest newest most voted
1

answered May 15 '15

Ondřej Máca gravatar image

updated May 15 '15

Nevím jestli je to nejvhodnější, ale já bych to udělal asi nějak takhle:

  class RegularMatrix : public Matrix{
      public:
         RegularMatrix operator+(const RegularMatrix &  secondMatrix) const{
             Matrix tmp = (Matrix)*this + secondMatrix;
             return RegularMatrix(tmp...);     
         }
 };

Sečetl bych matice pomocí operátoru rodičovské třídy a pak bych zkopíroval členské proměnné. Což by při vhodné práci s ukazateli nemuselo stát v podstatě nic.

link

Comments

Doufám že se jim to bude líbit v semestrálce, protože tam hlavně chtějí hledět na dodržení konvencí.

Petr Gondek (May 16 '15)
1

Aha, tak to nevím. Druhá možnost je udělat si na matici zvlášť strukturu, která by byla členskými proměnou ve třídě Matrix (a tedy i RegularMatrix) udělal by si ji operator+ a v těch dvou zmíněných třídách by si ho akorát zavolal

Ondřej Máca (May 16 '15)
add a comment

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: May 14 '15

Seen: 222 times

Last updated: May 15 '15