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.
|