我们什么时候应该封装代码才能成为"Class"?
When should we encapsulate codes to be a "Class"?
到目前为止,我回顾了我的代码,发现我很少写class
。或者,换句话说,我看不到使用它们的价值。我的意思是,几乎所有编码,我都可以在不使用类的情况下通过编写函数来解决这些问题,并根据它们的功能将它们分组到不同的.h/.cpp
文件中。
即使在我参加了几个项目之后,我仍然没有感到这样做的紧迫性,因为进展顺利,没有大的挑战。我主要与C++(有时是MATLAB)合作。
请注意,我确实经常使用struct
,我知道结构和类对C++没有太大区别。但我只使用结构进行数据存储(将数据组合在一起)。数据不需要流量控制(即维护或保护内部状态的 getter/setter),也不需要开始获取任何主要功能。
也许我错过了关于OOP的基本知识。那么我们什么时候应该使用类封装我们的代码呢?任何人都可以分享您的意见吗?
在C++中,struct
和class
是相同的,只是默认访问修饰符不同。struct
成员默认为public
,而class
成员默认为private
。如果我们将 C++ 中的类视为具有封装的数据成员和公开与该数据相关的功能的公共成员函数的class
,以下是您希望使用类的一些好建议:
- 您需要存储一些由相关数据项组成的状态,并且... 您需要在此状态
- 上施加一些不变量,或者为此状态提供一些替代接口。
如果你只有建议 1,那么你可能只需要一个结构。请参阅类应强制实施不变量。
您可以使用大多数语言编写无类代码。在Java中,你只会使用static
方法,没有其他方法。
使用 C/C++struct
s 将值组绑定到一个单元中,形成可以单独创建和操作的单个组件。
当你发现你需要类(通常是对象)的class
和实例的那一刻,就是你在编码中成长的那一刻。使用class
,您可以将许多字段绑定在一起(与struct
s一样),但在这里您也可以将method
s附加到它们。您现在正在使用具有结构和功能的对象。
一旦这一步完成,你会发现一个全新的编程世界,你把这些对象放在其他对象中,或者放入queue
中进行传输,或者放在map
s和set
s中进行存储,然后你发现map
、set
和queue
本身就是一个具有自己class
的对象。
总之 - 只用process
工作就像用沙子盖房子一样。与struct
一起工作就是用棍子建造你的房子。使用class
es 可以让你实例化object
并将它们作为实体进行操作 - 用石头建造你的房子 - 然后你可以离开你迄今为止一直在辛苦的过程,开始考虑你的系统架构。
- 为什么我不能使用 std::unique_ptr 作为"模板<class>类"参数?
- 为什么不能提升::hana::overload_t成为类的成员
- C++:不能使运算符<<成为模板嵌套类的好友
- 为什么我不能使私人运营商成为新的并使用默认实现?
- C++:为什么'this'不能成为 nullptr?
- 不能使外部类成为内部类内的成员对象
- OpenGL不能成为一个完美的立方体
- 为什么Main不能成为ConstexPr
- 我们什么时候应该封装代码才能成为"Class"?
- 如果 npos 为 -1,size_type怎么能成为无符号积分
- “f();”怎么能成为下面的声明
- 为什么我不能使这个成员函数成为另一个类的好友?
- 是否可以从模板基类继承,但不能使派生类也成为模板
- 不能在没有对象的情况下调用成员函数 std::string class::function()
- 为什么"template<class T> void f(T& t)"可以覆盖 T 中的函数,而"template<class T> void f(T t)"不能?
- 为什么我不能使类内初始化的"const const std::string"成为静态成员
- 一个函数,它是允许'read access'其'private members'但不能"写入访问权限"的'friend of a Class'?
- 80040111 ClassFactory不能提供请求的类(异常来自HRESULT: 0x80040111 (class
- 为什么C++不能用 "super class" 类型的右值初始化 "derived class" 类型的变量?
- 如何查找不能成为 Unicode 字符串中单词一部分的字符