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