目标:像搭积木一样构建复杂程序,用「现实事物」理解抽象编程思想
1. 类与对象:像认识「生物细胞」一样学类
类比:
- 类 = 细胞结构图(定义细胞有细胞膜、细胞质、细胞核)
- 对象 = 具体的细胞(比如你的皮肤细胞、神经细胞)
代码示例:
// 定义一个「学生」类(就像画一张学生信息卡模板)
class Student {
public: // 公开区域(别人能看见的信息)
string name;
int score;
void showInfo() { // 成员函数(学生能做的事情)
cout << name << "的成绩是:" << score << endl;
}
};
int main() {
Student xiaoming; // 创建一个具体的学生对象
xiaoming.name = "小明";
xiaoming.score = 85;
xiaoming.showInfo();
}
关键点:
- class 是设计图,对象是按图制造的实物
- public 就像公开的姓名牌,private 像日记本(后续会讲)
2. 构造函数与析构函数:像「开学报到」和「毕业离校」
类比:
- 构造函数:新生入学时登记姓名、学号(初始化对象)
- 析构函数:毕业时清理课桌、归还校服(释放资源)
代码示例:
class Student {
private:
string name;
public:
// 构造函数(名字和类名相同)
Student(string n) {
name = n;
cout << name << "同学入学啦!" << endl;
}
// 析构函数(前面加~)
~Student() {
cout << name << "同学毕业了!" << endl;
}
};
int main() {
Student xiaohong("小红"); // 创建对象时自动调用构造函数
// main函数结束时,自动调用析构函数
}
运行结果:
小红同学入学啦!
小红同学毕业了!
3. 继承与多态:像「生物分类」理解继承关系
类比:
- 基类(动物) → 派生类(猫、狗)
- 多态:同样是「叫()」方法,猫是喵喵,狗是汪汪
代码示例:
// 基类:动物
class Animal {
public:
virtual void sound() { // virtual 表示支持多态
cout << "动物发出声音" << endl;
}
};
// 派生类:猫
class Cat : public Animal {
public:
void sound() override { // override 表示重写父类方法
cout << "喵喵~" << endl;
}
};
int main() {
Animal* myPet = new Cat(); // 用基类指针指向派生类对象
myPet->sound(); // 输出"喵喵~"
delete myPet;
}
关键点:
- 继承就像家族遗传,派生类拥有父类的特性
- 多态让同一指令(如「叫」)产生不同结果
4. 运算符重载:像定义「向量加法」一样自定义运算
类比:数学中的向量相加 (1,2) + (3,4) = (4,6)
代码示例:
class Vector {
public:
int x, y;
// 重载+运算符
Vector operator+(const Vector& v) {
Vector result;
result.x = x + v.x;
result.y = y + v.y;
return result;
}
};
int main() {
Vector v1{1,2}, v2{3,4};
Vector v3 = v1 + v2; // 现在可以直接用+号相加
cout << v3.x << "," << v3.y << endl; // 输出4,6
}
5. 模板:像「数学公式」一样通用
类比:公式 y = ax + b 中,a、x、b可以是整数或小数
代码示例:
// 通用交换函数模板
template
void mySwap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int x=5, y=10;
mySwap(x, y); // 交换整数
string s1="hello", s2="world";
mySwap(s1, s2); // 交换字符串
}
6. 智能指针:像「实验室器材管理」防丢失
类比:学生借实验器材时,管理员自动登记归还时间
代码示例:
#include
int main() {
// unique_ptr 像「唯一借阅卡」
unique_ptr p1(new int(10));
// shared_ptr 像「公共图书」,记录借阅人数
shared_ptr p2 = make_shared(20);
}
// 退出作用域时,内存自动释放(无需手动delete)
综合项目:学生管理系统(含文件存储)
功能拆解:
- 定义Student类(姓名、学号、成绩)
- 使用vector
存储学生数据 - 通过fstream将数据保存到文件
- 实现添加、查询、修改功能
关键代码片段:
class Student {
public:
string name;
int id;
double score;
// 构造函数、显示信息等方法...
};
void saveToFile(vector& students) {
ofstream file("students.txt");
for (auto& s : students) {
file << s.id << " " << s.name << " " << s.score << endl;
}
}
用「学科知识」辅助记忆
编程概念 | 学科类比 |
类与对象 | 生物课细胞结构图 vs 真实细胞 |
继承 | 数学集合中的包含关系(A?B) |
模板 | 代数中用字母代替数字 |
智能指针 | 物理实验中的安全操作流程 |
多态 | 化学同素异形体(如O2与O3) |
下一步建议:
- 从改写综合项目开始练习
- 尝试用类描述身边事物(如书本、手机)
- 结合调试工具观察构造函数/析构函数调用顺序