第三课《封装护盾》
—— 为什么对象不能让别人乱碰?
🌟本课学习目标
学完这一课,同学们将能够:
✅ 理解什么是“封装”
✅ 理解为什么数据不能乱改
✅ 掌握:
public private✅ 学会“保护对象”
✅ 学会 getter / setter
✅ 开始建立“安全对象”的思想
✅ 能举一反三设计安全类
🌍 第一章:对象王国发生大危机!
1、在上一节课。
(1)我们已经进一步会制造对象了!
比如:
Hero hero1;(2)hero1 是一位勇士。
它有:
名字 血量 攻击力(3)本来一切正常。
结果有一天!
有个程序员误写了:
hero1.hp = -999999;(4)整个游戏世界瞬间崩塌!
💥 勇士血量变成负数!
(5)勇士:
“我已经死到地下十八层了吗?!”(6)另一个程序员写下了:
hero1.atk = 99999999;(7)结果:
🌋 一刀砍爆宇宙!
(8)对象王国的国王吓坏了:
🌟“不能让别人随便乱改对象的数据!”🌟
🛡️ 第二章:封装护盾出现了!
1、“封装法师”出现了。
他说:
🌟“对象应该保护自己!”🌟
2、于是。
他采用了:
⚔️封装护盾⚔️
3、🌟封装是什么?
一句话:
🌟“把重要数据藏起来,不让别人乱改。”🌟
4、就像:
🏦 银行金库
金库里的钱:
❌ 不能随便拿
❌ 不能随便改
必须:
✅ 通过管理员
✅ 通过规则
对象也是一样!
🧠 第三章:public 和 private
1、在 class 世界里。
有两个超级重要区域:
2、🌟public(公共区域)
表示:
“外面的人可以直接访问”例如:
hero.name3、🌟private(秘密区域)
表示:
“外面的人禁止直接访问”🏰 第四章:第一次使用 private!
1、🌟危险版本(没有保护)
class Hero { public: string name; int hp; };别人可以:
hero.hp = -100000;世界爆炸。
2、🌟安全版本(封装护盾)
#include <iostream> using namespace std; class Hero { public: string name; private: int hp; }; int main() { Hero hero1; hero1.name = "小勇士"; // hero1.hp = 100; }3、🌟现在会发生什么?
如果写:
hero1.hp = 100;编译器会报错!
4、🌟因为:
hp 被 private 护盾保护起来了!🧠 第五章:可是问题来了!
1、同学们马上会问:
❓“那 hp 永远不能修改了吗?”
2、当然不是!
否则勇士:
怎么回血?
怎么受伤?
3、所以:
封装法师说:
🌟“可以改,但必须按规则改!”🌟
4、于是:
getter / setter 登场!
🛠️ 第六章:setter —— 安全修改数据
1、🌟安全设置血量
#include <iostream> using namespace std; class Hero { public: string name; void setHp(int h) { if(h >= 0) { hp = h; } } private: int hp; }; int main() { Hero hero1; hero1.name = "小勇士"; hero1.setHp(100); }2、🌟重点理解
以前:
❌ 谁都能直接改 hp
现在:
✅ 必须通过:
setHp()3、🌟setHp 就像“保安”!
它会检查:
if(h >= 0)4、🌟只有合法血量才能进入!
5、❌ 非法情况
hero1.setHp(-999);不会成功!
6、🌟世界安全了!
📦 第七章:getter —— 安全读取数据
1、现在。
hp 被 private 保护。
外面不能直接看。
怎么办?
2、🌟使用 getter!
int getHp() { return hp; }3、🌟完整代码
#include <iostream> using namespace std; class Hero { public: string name; void setHp(int h) { if(h >= 0) { hp = h; } } int getHp() { return hp; } private: int hp; }; int main() { Hero hero1; hero1.name = "小勇士"; hero1.setHp(100); cout << hero1.getHp() << endl; }4、🌟运行结果
100🧠 第八章:真正理解 getter/setter
很多同学这里会迷糊。
所以一定要用现实例子。
🏦 银行例子
1、🌟private 金库
别人:
❌ 不能直接碰钱
2、🌟setter
像:
💳 存钱窗口
会检查:
金额是否合法
有没有问题
3、🌟getter
像:
📋 查询余额窗口
只能查看。
4、🌟封装真正意义
不是:
“故意麻烦”而是:
🌟“保护对象安全”!
⚔️ 第九章:对象终于像“真正角色”了!
1、以前:
hero.hp = -999999;谁都能乱改。
2、现在:
对象会保护自己!
3、🌟这也是:
面向对象的重要思想!
4、对象不是:
“变量盒子”而是:
“有规则的角色”🧠 第十章:最容易犯的错误!
❌ 错误1:private 后直接访问
hero.hp = 100;会报错。
因为:
hp已经藏起来了。
❌ 错误2:忘记 public
如果:
setHp()写在 private 下面。
外面也不能调用。
🌟记住:
给别人用的函数 一般放 public❌ 错误3:setter 不做检查
错误写法:
void setHp(int h) { hp = h; }这样还是不安全。
🌟setter 的真正意义:
“检查合法性”
🏆 第十一章:闯关练习
🎮 第一关:Bank 类
要求:
private: money public: setMoney() getMoney()要求:
❌ 钱不能是负数
🎮 第二关:Student 类
要求:
姓名 成绩要求:
❌ 分数不能小于0
❌ 分数不能大于100
🎮 第三关:Pokemon 类
要求:
名字 等级 血量要求:
❌ 血量不能负数
👑 Boss挑战(真正举一反三)
请同学们自己设计:
🌟一个“安全对象”🌟
例如:
游戏角色
汽车
飞机
手机
银行卡
并思考:
🌟哪些数据不能乱改?
例如:
余额 速度 生命值 等级然后:
🌟使用 private 保护它!
🌟这一关很重要!
因为:
孩子开始真正理解:
“为什么需要封装”
而不是死记语法。
📚 第十二章:本课总结
1、🌟什么是封装?
🌟“把重要数据保护起来。”🌟
2、🌟为什么需要 private?
因为:
对象不能让别人乱改3、🌟getter/setter 是什么?
getter:
安全读取setter:
安全修改4、🌟今天真正学会的不是语法。
而是:
🌟“对象应该保护自己。”🌟
🚀 下一课预告
下一节课:
⚔️《对象会自己做事》⚔️
孩子将真正学会:
✅ 成员函数
✅ 对象行为
✅ 对象自己行动
✅ this 思想(弱化版)
✅ 构造函数初步
✅ “活的对象”真正诞生
🌟最后一句送给同学们
🌟“真正强大的对象,不只是保存数据。”
“它还会保护自己。”