0

このポリモーフィズムの実装が C++ で望ましいかどうか疑問に思っています。

スーパークラス (cPolygon) と 2 つのサブクラス (cRectangle と cTriangle) があります。問題は、スーパークラスに含まれていないサブクラスの 1 つにメソッドを実装することが適切な形式と見なされるかどうかです。cRectangle でのみsetSomethingメソッドを作成する必要があり ますか? そうする場合、スーパークラス cPolygon にもこのメソッドを作成する必要がありますか (明らかに抽象的ではありません)。

みんなありがとうピート

#include <iostream>
using namespace std;

// Super class
class CPolygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
  };
// Sublcass Rectangle
class CRectangle: public CPolygon {
  public:
    int area ()
      { return (width * height); }
    // Method only present in rectangle.
        // Is this OK?
    void setSomething(int a) {
        _a = a;
    }
private:
    int _a;
  };


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

int main () {
  CRectangle rect;
  CTriangle trgl;
  CPolygon * ppoly1 = &rect;
  CPolygon * ppoly2 = &trgl;
  // Is this OK?
  rect->setSomething(3);
  trgl->set_values(2,3);

  ppoly1->set_values (4,5);
  ppoly2->set_values (4,5);
  cout << rect.area() << endl;
  cout << trgl.area() << endl;
  return 0;
}
4

1 に答える 1

1

スーパークラスでは使用できない新しいメソッドをサブクラスに含めることは可能であり、完全に有効です。ただし、このような場合、正しいサブクラスオブジェクトを指していても、基本クラスのポインタまたは参照を使用して呼び出すことはできません。ただし、そのメソッドを呼び出すためにサブクラスへのポインターまたは参照をキャストすることはできますが、キャストは多くのバグの根本であり、回避する必要があります。

于 2012-05-28T02:26:46.787 に答える