news 2026/8/6 13:13:23

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小学生学C++编程语法知识(为什么 class 需要封装?)


C++面向对象核心:为什么 class 需要封装?


同学们,上节课我们学习了:

struct 和 class 的区别

我们知道:

class

默认:

private

也就是:

自己的数据,别人不能随便修改。


那么问题来了:

为什么 C++ 要设计 private?
为什么不让所有变量都 public,想改就改呢?

这就是今天要学习的核心:

封装(Encapsulation)


一、先看一个没有封装的世界

假设我们写一个学生类:

class Student { public: string name; int score; };

使用:

Student s; s.name="小明"; s.score=95;

看起来很方便。

但是问题来了:

如果有人写:

s.score=-100;

或者:

s.score=1000;

怎么办?


学生成绩应该:

0 ~ 100

但是现在:

-100 1000

都可以。


程序不会报错。

为什么?

因为:

score

是:

public

公开的。

任何人都可以改。


二、生活中的例子:银行卡

假设银行卡这样设计:

class BankCard { public: double money; };

然后:

BankCard card; card.money=1000000;

任何人都可以:

card.money=999999999;

这显然不合理。

银行账户余额:

不能让别人直接修改。


所以真实世界设计:

银行卡:

外面只能:

  • 存钱

  • 取钱

  • 查询余额


但是:

内部余额:

必须保护。

这就是:

封装


三、什么是封装?

一句话:

把重要的数据隐藏起来,只允许通过规定的方法访问。

英文:

Encapsulation


它包含两个动作:

1. 隐藏数据

使用:

private

2. 提供接口

使用:

public

例如:

class Student { private: int score; public: void setScore(int x) { score=x; } int getScore() { return score; } };

现在:

score 藏起来了。

外面不能:

s.score=100;

错误。

必须:

s.setScore(100);

四、private到底有什么作用?

我们来看:

class Student { private: int score; };

private表示:

只有自己可以访问


比如:

类里面:

void test() { score=100; }

可以。

但是外面:

Student s; s.score=100;

不可以。


可以想象:

private 是:

房间里面的保险箱。

public 是:

房间门口的按钮。

别人不能直接打开保险箱。

只能按按钮。


五、getter 和 setter 是什么?

很多同学第一次看到:

get set

不知道是什么意思。


其实非常简单:

getter

get:

获取

作用:

读取数据。


例如:

int getScore() { return score; }

意思:

把成绩告诉外面。


setter

set:

设置

作用:

修改数据。


例如:

void setScore(int x) { score=x; }

意思:

修改成绩。


所以:

函数作用
getterget,读取
setterset,修改

六、为什么不直接访问,要绕一圈?

有同学可能问:

老师:

s.score

不是很方便吗?

为什么:

s.setScore(90);

这么麻烦?

答案:

因为:

我们可以增加规则!


例如:

成绩必须:

0~100

setter:

void setScore(int x) { if(x>=0 && x<=100) { score=x; } else { cout<<"成绩错误"<<endl; } }

现在:

s.setScore(150);

输出:

成绩错误

程序安全了。


七、封装最大的价值:控制修改

看两个程序:


没封装:

student.score=-999;

任何地方:

随便改。

后果:

程序容易出错。


有封装:

student.setScore(-999);

进入:

if

检查。

错误被挡住。


所以:

封装不是为了麻烦程序员。

而是:

为了让程序更安全、更容易维护。


八、封装和游戏角色的关系

比如游戏:

英雄:

class Hero { private: int hp; public: void attack(); void heal(); };

血量:

hp

不能直接改。

否则:

玩家:

hp=999999

游戏就坏了。

所以:

只能:

攻击:

attack()

回血:

heal()

九、public、private、protected 三兄弟

C++ 有三个权限:


1. public(公开)

别人可以访问:

public: int age;

像:

学校公告。


2. private(私有)

只有自己可以访问:

private: int password;

像:

自己的密码。


3. protected(保护)

以后学习继承时使用。

现在可以简单理解:

给自己的孩子使用。


十、一个例子

设计一个银行账户:

#include<iostream> using namespace std; class Account { private: double money; public: Account() { money=0; } void deposit(double x) { if(x>0) { money+=x; } } double getMoney() { return money; } }; int main() { Account a; a.deposit(100); cout<<a.getMoney(); return 0; }

输出:

100

注意:

外面不能:

a.money=1000000;

因为:

money 是私有的。


十一、封装和结构体有什么关系?

回忆:

struct:

struct Student { int score; };

默认:

public

所以:

s.score=100;

可以。


class:

class Student { int score; };

默认:

private

所以:

不能直接访问。


但是:

两者都可以封装。

例如:

struct:

struct Student { private: int score; };

也是合法的。


十二、信奥竞赛需要学封装吗?


学习 class 的意义在于:

培养:

  • 大型程序设计思想

  • 软件工程能力

  • AI时代编程能力


未来:

写:

  • 游戏

  • App

  • 人工智能项目

封装非常重要。


十三、本节课总结

记住下面这句话:

封装,就是把数据藏起来,把操作方法留下来。


关键词:

概念作用
private保护数据
public提供服务
getter读取数据
setter修改数据

最终目标:

让对象自己管理自己,而不是让外部随便破坏。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 13:12:17

MySQL 8.0 源码编译安装与深度调优实战指南

1. 项目概述&#xff1a;为什么选择源码安装MySQL&#xff1f;在数据库运维和开发领域&#xff0c;MySQL的安装几乎是每个从业者的必修课。市面上充斥着各种一键安装包、Docker镜像和系统包管理器&#xff08;如yum、apt&#xff09;的安装教程&#xff0c;它们确实方便快捷&am…

作者头像 李华
网站建设 2026/8/6 13:12:21

KeyShot渲染软件完整安装配置指南:从系统准备到SolidWorks插件集成

1. 从“安装”到“高效使用”&#xff1a;一个渲染新手的完整入门指南最近在几个设计交流群里&#xff0c;看到不少朋友都在问关于KeyShot安装的问题。有人卡在许可证激活&#xff0c;有人装完发现材质库是空的&#xff0c;还有人和SolidWorks联动不起来。这让我想起自己几年前…

作者头像 李华
网站建设 2026/8/6 13:13:08

从“小球落地”问题解析动态规划与图论建模的竞赛思维

1. 项目概述与核心思路最近在带几个准备CSP-S复赛的学生集训&#xff0c;发现他们对于动态规划和图论这两大核心模块的理解&#xff0c;总是停留在“背模板”的阶段。一遇到稍微变化一点的题目&#xff0c;比如把经典的“爬楼梯”问题换个场景&#xff0c;或者在图论里加个条件…

作者头像 李华
网站建设 2026/8/5 7:12:08

Wi-Fi 7核心技术解析:从MLO、4096-QAM到Ubuntu适配指南

1. 从WIFI6到WIFI7&#xff1a;我们到底在期待什么&#xff1f;最近几年&#xff0c;每次Wi-Fi协议的迭代升级都能引起一阵不小的讨论。从Wi-Fi 5&#xff08;802.11ac&#xff09;到Wi-Fi 6&#xff08;802.11ax&#xff09;&#xff0c;我们体验到了更快的速度、更好的多设备…

作者头像 李华
网站建设 2026/8/5 7:11:09

Python招聘数据分析系统:从爬虫到可视化看板的实战指南

1. 项目缘起&#xff1a;当“金三银四”遇上数据迷雾又到了一年一度的“金三银四”招聘季&#xff0c;作为技术团队的负责人&#xff0c;我每年这个时候都面临一个头疼的问题&#xff1a;如何快速、准确地把握市场脉搏&#xff1f;是前端更吃香还是后端更卷&#xff1f;Python岗…

作者头像 李华