1. 从C到C++:为什么我们需要面向对象编程
十年前我刚从C语言转向C++时,最困惑的就是为什么要搞出"类"、"对象"这些概念。直到参与一个图形编辑器项目,才真正体会到面向对象编程(OOP)的价值。当时我们需要处理圆形、矩形、三角形等多种图形,如果用C语言实现,代码会充满重复的switch-case:
cpp复制// C语言风格的图形处理
void draw(ShapeType type) {
switch(type) {
case CIRCLE:
draw_circle();
break;
case RECTANGLE:
draw_rectangle();
break;
// 每新增一种图形就要修改这里
}
}
而用C++的继承和多态,代码变得优雅且易于扩展:
cpp复制// C++面向对象风格
class Shape {
public:
virtual void draw() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
void draw() override { /* 绘制圆形 */ }
};
// 使用时不需关心具体类型
void render(Shape* shape) {
shape->draw(); // 自动调用正确的绘制函数
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 继承:代码复用的艺术
2.1 三种继承方式比较
上周review新人代码时发现一个典型问题:滥用public继承。这促使我总结出继承方式的选择原则:
| 继承方式 | 基类public成员 | 基类protected成员 | 基类private成员 | 适用场景 |
|---|---|---|---|---|
| public | 保持public | 保持protected | 不可访问 | "是一个"关系 |
| protected | 变为protected |
