C++软件体系结构与设计
C++ software architecture and design
在我的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++中的思考
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 以编程方式在运行时检测 CPU 体系结构
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- C 设计用于多层通信的软件体系结构
- C++软件体系结构与设计
- 继承、指针和软件体系结构