簡體   English   中英

C ++軟件架構和設計

[英]C++ software architecture and design

在我的C ++程序中,我想創建一個具有寬度,高度,面積等屬性的對象。我還想聲明使用和更新此屬性的方法。

我希望以某種方式在名為WidthManipulator的標頭,名稱空間或子類(無論如何都可以)中列出“設置”和“獲取”屬性“ width”的方法。

我要以這種方式創建結構的原因是,我想對另一個類的另一個方法(例如HeightManipulator)使用“ get”名稱。

但是對於嵌套類,對於Rectangle :: WidthManipulator :: Get(),我收到“非法調用非靜態成員函數”錯誤。 我也不想創建Manipulator對象,因為這些類沒有屬性,只有正在使用和更新父屬性的方法...還有一件事,由於我自己的一個很好的原因,我想使用void返回值。

class Rectangle{
public:
int width,height;
int area;
int widthreturned;

    class WidthManipulator{
    public:
    void Set(int x){width = x;} 
    void Get(){widthreturned = width};
    };
};

我該如何解決我的問題? 我的結構應該是什么?

C ++中的內部類與Pascal中的內部類不同。 它只是在外部類的“名稱空間”中呈灰色顯示,但沒有其他變化。 它僅看到自己的成員,並且該實例與外部實例無關。

如果要建立關系,則必須以某種方式傳遞外部實例,例如在構造函數中。 然后,您可以通過該指針或引用訪問成員。

不確定為什么要以這種方式構造類操縱器,但是要了解Inner類的機制,請考慮為使Inner類訪問OUter類成員,外部類應將Inner聲明為朋友:

class Outer
{ 
   int area;
   class Inner1;
   friend class Outer::Inner1;
   class Inner1 
   {
       Outer* parent;
   public:
       Inner1(Outer* p) : parent(p) {}
       void Set(int x){p->area= x;} 

   } inner1;
   // ... more stuff
};

如果您想更詳細地了解一下,建議您看一下設計模式示例,第11章第2卷,C ++思維

暫無
暫無

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

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