Problém s Polymorfismem   zodpovězená otázka

Architektura, C++/C

Pracuji na knihovně pro práci s maticemi v C++. Jak je možné dodat polymorfismus? Jak je možné spojit trídy ctvercovamatice a obecnamatice, v jeden objekt matice(podle zadaného rozměru se vytvoří obecna nebo ctvercovamatice)? Děkuji.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nejsem si sice přesně jistý, na co se ptáte, ale zkusím odpovědet na to, jak jsem to pochopil já:)

// nejdrive nadeklarujeme obecnou matici
class matice {
  public:
  virtual int GetWidth() = 0;
  virtual int GetHeight() = 0;
  static matice *VytvorMatici(int w, int h);
  matice *Transpozice() { /* udelame transpozici matice */ }
  // a zde muzou prijit nejake jine metody
  
}; 
class ctvercovamatice {
  private: int size;
  public int GetWidth() { return size; }
  public int GetHeight() { return size; }
  public ctvercovamatice(int s) { size=s; }
};
class obecnamatice {
  private: int w,h;
  public int GetWidth() { return w; }
  public int GetHeight() { return h; }
  public obecnamatice(int W,int H) { w=W; h=H; }
}; 

matice *matice::VytvorMatici(int w, int h)
{
  if (w==h) return new ctvercovamatice(w);
  else return new obecnamatice(w,h);
} 

Vyhoda je, že např. ta metoda Transpozice může být definována jednou a fungovat pro oboje typy matic. Doufám, že v kódu nejsou moc velké chyby, v C++ jsem už asi rok nenapsal ani čárku.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Děkuji za pomoc!

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback