簡體   English   中英

C ++多態樣式-僅在子類中實現自定義方法

[英]C++ polymorphism style - implement custom methods in subclass only

我想知道在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;
}

在子類中具有超類中不可用的新方法是可能且完全有效的。 但是在這種情況下,即使它指向正確的子類對象,也將無法使用基類指針或引用來調用它。 但是,您可以將指針或對子類的引用強制轉換為調用該方法,但是強制轉換是許多錯誤的根源,應避免使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM