小学生学C++编程语法知识(为什么 class 需要封装?)

发布时间:2026/8/5 7:16:52
小学生学C++编程语法知识(为什么 class 需要封装?)
C面向对象核心为什么 class 需要封装同学们上节课我们学习了struct 和 class 的区别我们知道class默认private也就是自己的数据别人不能随便修改。那么问题来了为什么 C 要设计 private为什么不让所有变量都 public想改就改呢这就是今天要学习的核心封装Encapsulation一、先看一个没有封装的世界假设我们写一个学生类class Student { public: string name; int score; };使用Student s; s.name小明; s.score95;看起来很方便。但是问题来了如果有人写s.score-100;或者s.score1000;怎么办学生成绩应该0 ~ 100但是现在-100 1000都可以。程序不会报错。为什么因为score是public公开的。任何人都可以改。二、生活中的例子银行卡假设银行卡这样设计class BankCard { public: double money; };然后BankCard card; card.money1000000;任何人都可以card.money999999999;这显然不合理。银行账户余额不能让别人直接修改。所以真实世界设计银行卡外面只能存钱取钱查询余额但是内部余额必须保护。这就是封装三、什么是封装一句话把重要的数据隐藏起来只允许通过规定的方法访问。英文Encapsulation它包含两个动作1. 隐藏数据使用private2. 提供接口使用public例如class Student { private: int score; public: void setScore(int x) { scorex; } int getScore() { return score; } };现在score 藏起来了。外面不能s.score100;错误。必须s.setScore(100);四、private到底有什么作用我们来看class Student { private: int score; };private表示只有自己可以访问比如类里面void test() { score100; }可以。但是外面Student s; s.score100;不可以。可以想象private 是房间里面的保险箱。public 是房间门口的按钮。别人不能直接打开保险箱。只能按按钮。五、getter 和 setter 是什么很多同学第一次看到get set不知道是什么意思。其实非常简单getterget获取作用读取数据。例如int getScore() { return score; }意思把成绩告诉外面。setterset设置作用修改数据。例如void setScore(int x) { scorex; }意思修改成绩。所以函数作用getterget读取setterset修改六、为什么不直接访问要绕一圈有同学可能问老师s.score不是很方便吗为什么s.setScore(90);这么麻烦答案因为我们可以增加规则例如成绩必须0~100settervoid setScore(int x) { if(x0 x100) { scorex; } else { cout成绩错误endl; } }现在s.setScore(150);输出成绩错误程序安全了。七、封装最大的价值控制修改看两个程序没封装student.score-999;任何地方随便改。后果程序容易出错。有封装student.setScore(-999);进入if检查。错误被挡住。所以封装不是为了麻烦程序员。而是为了让程序更安全、更容易维护。八、封装和游戏角色的关系比如游戏英雄class Hero { private: int hp; public: void attack(); void heal(); };血量hp不能直接改。否则玩家hp999999游戏就坏了。所以只能攻击attack()回血heal()九、public、private、protected 三兄弟C 有三个权限1. public公开别人可以访问public: int age;像学校公告。2. private私有只有自己可以访问private: int password;像自己的密码。3. protected保护以后学习继承时使用。现在可以简单理解给自己的孩子使用。十、一个例子设计一个银行账户#includeiostream using namespace std; class Account { private: double money; public: Account() { money0; } void deposit(double x) { if(x0) { moneyx; } } double getMoney() { return money; } }; int main() { Account a; a.deposit(100); couta.getMoney(); return 0; }输出100注意外面不能a.money1000000;因为money 是私有的。十一、封装和结构体有什么关系回忆structstruct Student { int score; };默认public所以s.score100;可以。classclass Student { int score; };默认private所以不能直接访问。但是两者都可以封装。例如structstruct Student { private: int score; };也是合法的。十二、信奥竞赛需要学封装吗学习 class 的意义在于培养大型程序设计思想软件工程能力AI时代编程能力未来写游戏App人工智能项目封装非常重要。十三、本节课总结记住下面这句话封装就是把数据藏起来把操作方法留下来。关键词概念作用private保护数据public提供服务getter读取数据setter修改数据最终目标让对象自己管理自己而不是让外部随便破坏。