C++软件体系结构与设计

C++ software architecture and design

本文关键字:软件体系结构 C++      更新时间:2023-10-16

在我的C++程序中,我想创建一个具有宽度、高度、面积等属性的对象。我还想声明使用和更新这些属性的方法。

我希望以某种方式将"set"answers"get"属性"width"的方法列在名为WidthManipulator的头、命名空间或子类(无论如何都是可能的)中。

我想以这种方式创建结构的原因是,我想为另一个类的另一个方法使用"get"名称,比如HeightManipulator。

但是对于嵌套类,Rectange::WidthManipulator::get()会出现"非法调用非静态成员函数"错误。我也不想创建操纵器对象,因为这些类没有属性,只有使用和更新父属性的方法。。。还有一件事,我想使用无效返回是有充分理由的。

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类成员,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++中的思考