没必要用面向对象。小型程序如单文件、200行内、无状态维护的工具,class徒增负担;struct与class在未用继承/多态时语义等价;真正该警惕的是滥用class而非不用。

没必要。小型程序用面向对象,就像用起重机搬一盒图钉——不是不能,是徒增负担。
什么时候 class 反而让代码更难读
当你写的是单文件、不到 200 行、不涉及状态维护的工具型程序时,class 往往只是把简单逻辑套进一层壳里:
- 所有成员变量都是
public,和结构体没区别,但多了class关键字和构造函数空壳 - 每个函数只调用一次,却硬拆成
setX()→doWork()→getResult(),不如直接写int result = compute(x, y); - 为了“封装”而加
private,结果又立刻写一堆getXXX(),访问控制形同虚设
struct 和 class 在小项目里其实没差别
C++ 中 struct 默认 public,class 默认 private,仅此而已。如果你没用到继承、多态、隐藏实现细节这些 OOP 特性,那二者语义上完全等价:
struct Vec2 {
double x, y;
double len() const { return sqrt(x*x + y*y); }
};
和
class Vec2 {
public:
double x, y;
double len() const { return sqrt(x*x + y*y); }
};
对编译器、对维护者、对你自己,没有任何实质区别。别被语法形式带偏了重点。
真正该警惕的不是“没用 class”,而是“滥用 class”
新手容易陷入一个误区:以为用了 class 就等于写了“面向对象”,结果写出这样的代码:
- 一个
Calculator类,里面只有静态函数,没有成员变量 - 所有方法都接受全部参数,从不依赖
this,类实例成了摆设 - 为每个小功能建一个类(
Printer、Logger、ConfigLoader),但每个类只创建一次、用一次、无复用
这类代码既没获得封装的好处,也没得到继承/多态的收益,反而增加了理解成本和编译依赖。
复杂点在于:所谓“小型”不是按行数机械划分的,而是看有没有**需要长期持有并协同变化的状态**。比如一个命令行计算器,输入→计算→输出,无中间状态,就该扁平;但如果你开始缓存历史表达式、支持撤销、记录用户偏好,那状态自然浮现,class 才开始变得必要。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











