Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Polymorphism

Čau mám dotaz ohledně polymorfismu,
jaké je reálné využití. Dám příklad

#include <iostream>
using namespace std;

class Shape
{
public:
  virtual float GetArea() = 0;
};

class Rectangle : public Shape
{
public:
  Rectangle(float a) { this->a = a; }
  float GetArea() { return a * a; }
private:
  float a;
};

class Circle : public Shape
{
public:
  Circle(float r) { this->r = r; }
  float GetArea() { return 3.14f * r * r; }
private:
  float r;
};

int main()
{
  Shape *a = new Circle(1.0f);
  Shape *b = new Rectangle(1.0f);

  cout << a->GetArea() << endl;
  cout << b->GetArea() << endl;
}

Máme tento kód, kde pomocí ukazatele na base třídu přistupujeme k metodám v odvozených třídách.
Mě by zajímalo, jaký to má význam a proč se nepoužije rovnou ukazatel na odvozenou třídu, když
její jméno stejně musíme znát. Může někdo dát prosím praktický příklad nebo říct výhody, proč
se využívá zrovna tenhle přístup. Má to například nižší nároky nebo je to z jiného důvodu? Díky

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Dalsi pouziti jsou funkce/procedury, ktere jako parametr deklaruji Shape a neco s nim delaji , ale t… nový
gilhad 02.07.2014 17:32
gilhad
V programování se sice nevyznám, ale někde sem četl, že polymorfizmus je nejlepší používat u virů. P… nový
Davča2 02.07.2014 17:58
Davča2
To je ovšem naprosto jiný polymorfismus. poslední
Wikan 02.07.2014 18:38
Wikan

Dalsi pouziti jsou funkce/procedury, ktere jako parametr deklaruji Shape a neco s nim delaji , ale ty jim posles jednou Circle, jindy Rectangle, jindy jeste neco dalsiho, co jsi dodnes ani nenapsal (treba SpaceShip)

Treba do Shape pridas metody Draw a Hide a SetOrigin a pak muzes napsat funkci

void MoveTo(Shape *a, int x, int y) {a->Hide();a->SetOrigin(x,y);a->Draw();}

a volat MoveTo(myCircle,10,20);

samozrejme ta MoveTo muze byt metodou Shape,

pak bys ji deklaroval pouze v Shape a vsechny ostatni odvozene obrazce by ji dedily a ty bys ji nepotreboval prepisovat pro kazdy typ zvlast.

Takze pak bys mel pole Shapu, tam bys dal ruzne Rectangle, Circle, SpaceShip a cokoli dalsiho a jednim cyklem bys dokazal presunout vsechny ty tvary po obrazovce ...

Zpět do poradny Odpovědět na původní otázku Nahoru