为什么不使用嵌套结构来分离函数和数据呢
Why not separating functions and data with nested structs?
我经常考虑避免在toString方法、初始化列表等中"忘记成员变量",。。。此外,我经常看到对象本身的逻辑(数据使用和操作)与纯数据护理(初始化、获取/设置、复制的构造函数、rval复制、bla)混合在一起。
如果涉及到有很多方法和成员变量的真正大的类,就会非常令人困惑。
那么,为什么程序员不把所有变量放在一个嵌套的结构中,只做数据处理和提取业务逻辑呢?
我想
class NestedStructTesting
{
public:
typedef struct TData
{
private:
int var1;
float var2;
public:
int getVar1(){return var1;};
void setvar1(int value){var1 = value;};
int getVar2(){return var2;};
void setvar2(int value){var2 = value;};
TData()
{
var1 = 0;
var2 = 0;
}
};
TData Data;
NestedStructTesting(void)
: Data()
{
};
};
可能会接到外部电话,比如:嵌套结构测试st;st数据setvar1()
(我没有在大型项目中使用它的任何经验,因为我还没有建立一个)
这个模式已经存在,它被称为PIMPL习惯用法,它隐藏了所有的类数据。
有了它,您就可以将公共方法与私有方法和数据分离开来,而这些方法和数据只存在于.cpp.中
举个例子,所有的Qt框架都是用这个习惯用法构建的,所以你永远不会(也许会夸大,但你明白了)在它们提供的数百个头文件中看到任何私有类变量,只有公共(和虚拟保护)方法。
PIMPL习惯用法的其他好处是,它简化了二进制兼容性,使类接口更清晰(通过从头文件中删除私有和非虚拟受保护的成员),减少编译时间(通过从头文件中删除#includes),并将接口与实现分离(通过隐藏依赖于实现的变量和方法,这些变量和方法通常是私有的)
因为如果您处于这种情况,那么您很可能需要创建另一个类来分配您的大类正在做的大量工作。在这种情况下,您也很可能将该内部类放在其自己的.hpp/.cpp
文件中。
如果您认为类的逻辑彼此非常接近,因此它们最好位于相同的文件中,或者只是因为您在整体设计中填充得更干净,那么您可以使用内部类。
AFAIK嵌套类只有一个限制,即不能在任何情况下都转发声明它们。
更一般地说,除非你有一个类似MVC的模式,否则你不想把数据从逻辑中分离出来,而是想把小块数据和它们对应的小块逻辑分组,这是实现OOP最简单有效的方法之一。事实上,在框架设计之外,许多开发人员选择了一个分离单元,它不一定是代码的性质/类型(数据/逻辑/其他),而是它的大小,无论好坏:)
- 链表,反向函数,数据结构
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 从函数返回任意简单类型的数据
- 友元函数无法访问私有数据成员 (c++)
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- 为什么我们使用在C++中返回数据结构的函数?
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 重写函数不打印基类数据
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 接受函数在发送数据包时等待
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- C++中是否有用于长数据类型的 lower_bound() 函数?
- 在线程函数中处理数据向量时进行线程竞速
- 使用函数数据类型键入别名和别名模板
- 从循环返回char函数数据
- c++从非成员调用类函数/数据
- C++类构造函数数据传递