Polymorphism Question

2

Per amore della domanda ho preso questo codice da link

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
};

class Rectangle: public Polygon {
  public:
    int area()
      { return width*height; }
};

class Triangle: public Polygon {
  public:
    int area()
      { return width*height/2; }
};

int main () {
  Rectangle rect;
  Triangle trgl;
  Polygon * ppoly1 = ▭
  Polygon * ppoly2 = &trgl;
  ppoly1->set_values (4,5);
  ppoly2->set_values (4,5);
  return 0;
}

È possibile creare un array Poligono e memorizzare oggetti Triangolo e Rettangolo in esso ed essere ancora possibile accedere alle funzioni associate alle rispettive classi?

Ad esempio:

Polygon *array[2];
array[0] = new Triangle;
array[1] = new Rectangle;

C'è un modo per chiamare area () dall'array Poligono?

    
posta Jacob Bauer 28.02.2015 - 00:24
fonte

1 risposta

4

No, l'accesso alle funzioni è limitato alle sole funzioni della classe base.

Ma c'è un modo semplice per risolvere questo problema, fornendo pura funzione virtuale nella classe base:

class Polygon {
public:
  virtual int area()=0;
};

Quindi funzionerà perfettamente.

    
risposta data 28.02.2015 - 00:31
fonte

Leggi altre domande sui tag