[英]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.