C ++多态类型 - 仅在子类中实现自定义方法

时间:2012-05-28 02:14:02

标签: c++ polymorphism

我想知道在C ++中是否需要这种多态性的实现。

我有一个超类(cPolygon)和两个子类(cRectangle和cTriangle)。 问题是,在一个未包含在超类中的子类中实现一个方法是否被认为是好的形式,即。我应该创建 仅在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;
}

1 个答案:

答案 0 :(得分:1)

在子类中使用超类中不可用的新方法是完全有效的。 但在这种情况下,即使它指向正确的子类对象,您也无法使用基类指针或引用来调用它。 但是,您可以将指针或引用强制转换为子类来调用该方法,但是转换是许多错误的根源,应该避免使用。