对象与类:通俗版解释
1. 类和对象是什么?
- 类:就像一张设计图。比如“汽车设计图”规定了一辆车必须有轮子、发动机、方向盘,还能加速和刹车。
- 对象:按照设计图造出来的具体东西。比如根据“汽车设计图”造出一辆红色跑车,或者一辆蓝色卡车。
一个类可以创建出多个对象
例子:
1 | class Dog { // 类:狗的“设计图”,通常开头字母大写 |
2. 类的成员:数据和函数
- 数据成员:描述对象的属性。比如狗的年龄、颜色。
- 成员函数:描述对象能做什么。比如狗会叫、会跑。
关键点:
- 数据和方法都写在类里,形成一个整体。
- 数据一般藏起来(private),方法暴露出去(public)。
→ 比如狗的年龄是私有的(不能随便改),但“叫”的方法是公开的(谁都能让狗叫)。
3. 访问控制:public、private、protected
- public(公开):像房子的门铃,谁都能按。
- private(私有):像房子的保险箱,只有主人(类内部)能开。不能在类外改,只能在类内使用?修改。
- protected(保护):像家族保险箱,主人和子女(派生类)能开。
例子:
1 | class BankAccount { |
4. 对象的创建:直接和间接
直接创建:就像买现成的房子。
1
Dog myDog; // 直接定义一个狗对象

间接创建(动态对象):就像租房子,用完了要退租。
1
2
3Dog *p = new Dog(); // 租一只狗
p->bark(); // 让狗叫
delete p; // 退租(销毁狗)
注意:动态对象必须用new创建,delete销毁,否则会“内存泄漏”(房子不退租,一直占着地皮)。
(attachment:5dc98c3e-8e60-4244-b1b1-8210d8fb0225:image.png)
5. 成员函数:类内和类外实现(二者等价)
类内实现:直接把功能写在设计图里。
1
2
3
4class Dog {
public:
void bark() { cout << "汪汪!"; } // 类内实现
};类外实现:设计图只写功能名,具体实现写在别处。更常用
1
2
3
4
5
6
7class Dog {
public:
void bark(); // 声明
};
void **Dog::**bark() { **// 类外实现,加“<类名>::”**
cout << "汪汪!";
}
6. 成员对象:对象里的对象(数据成员的类型是类)
- 一个类可以包含另一个类的对象。比如“汽车类”包含“发动机类”的对象。不能包含该类的对象
1 | class Engine { ... }; // 发动机类 |
7. 对象的使用:赋值、传参、返回值
赋值:复制数据(比如把A狗的年龄复制给B狗)。同类对象进行赋值默认是把A的数据成员分别赋值给对象B的相应数据成员
传址:
取对象地址 Date today; Date *p_date; p_date = &today; //把对象today的地址赋值给指针p_date传参:
- 传值:复制整个对象(修改不影响原对象)。
- 传引用:直接操作原对象(修改会影响原对象)。
1 | void changeName(Dog d) { d.name = "小黑"; } // 传值:原狗名字不变 |
- 返回值:可以返回对象(临时副本)或引用(原对象)。


⚠️必考点!!!针对“把对象作为参数传给函数”与“把对象作为函数的返回值”只要有&就直接修改或返回,没有就copy一份再修改或返回
8. 为什么重要?
- 封装:保护数据(比如不能直接改狗的年龄为负数)。
- 模块化:每个类独立,方便修改(比如改发动机代码,不影响汽车其他部分)。
- 复用性:设计图(类)可以反复用,还能继承扩展(比如“警犬类”继承“狗类”)。
总结
- 类是设计图,对象是实物。
- 数据藏起来,方法露出去。
- 动态对象用完要销毁,成员对象随主对象生灭。
- 传参和返回值要注意是复制还是引用。
就像造车:
- 设计图(类)规定必须有发动机和方向盘。
- 造出的车(对象)可以加油、刹车。
- 发动机(成员对象)藏在车里,不能直接拆。
- 租车(动态对象)用完要还,否则亏钱!
1 |
|
1 |
|
1 | const 关键字出现在成员函数的声明中,作用是 指示该成员函数**不会修改类的成员变量**,即它是一个“只读”函数。 |