当前位置: 首页 > news >正文

C++ 核心面向对象:类与对象超全精讲|封装、成员属性、权限、新手避坑

C++核心面向对象:类与对象超全精讲|封装、成员属性、权限、新手避坑

前言

C++最大的特点就是兼容C语言面向过程 + 支持面向对象(OOP)

如果说变量、数组、循环是「面向过程」,那么类和对象就是 C++ 面向对象的基石
后续的构造函数、析构函数、继承、多态、STL全部建立在「类」的基础上。

这篇博客系统梳理类与对象的全部核心知识点,搭配通俗易懂的案例和高频易错点,适合期末复习、技术复盘、写学习日志。

一、什么是类和对象?

一句话通俗理解:

  • 类:模板、图纸、抽象的分类
  • 对象:根据模板造出来的具体实体、实例

举例:

  • 类:学生(有姓名、学号、成绩、学习行为)
  • 对象:你、我、班里每一个具体的同学

面向对象思想:把属性和行为封装到一个整体中

二、类的基本语法结构

C++ 类由两部分组成:

  1. 成员属性(变量):描述特征
  2. 成员函数(方法):描述行为

标准类结构

class 类名
{// 访问权限权限:成员变量;成员函数;
};

完整示例(学生类)

<string>
using namespace std;// 定义学生类
class Student
{
// 公共权限
public:// 成员属性string name;int id;// 成员函数void showInfo(){
< "姓名:< endl;< "学号< endl;}
};int main()
{// 创建对象Student s1;s1.name = "孟昊宇";s1.id = 2025001;// 调用成员方法s1.showInfo();return 0;
}

三、三大访问权限(考试/面试重点)

C++ 类中共有三种权限:

1. public 公共的

  • 类内可以访问,类外可以访问
  • 对外公开的内容,一般放成员函数

2. private 私有的(默认权限)

  • 仅类内可以访问,类外、子类都不能访问
  • 一般用来保护成员属性,防止外部随意修改

3. protected 保护的

  • 类内、子类可以访问,类外不可访问

权限总结(必背)

  1. public:公开
  2. private:最安全,只能自己用
  3. protected:给子类继承用

重点:class 默认权限是 private,struct 默认是 public

四、封装思想(面向对象三大特性之一)

什么是封装?

将属性和行为放在一个类中,并且私有化属性,对外提供接口访问。

为什么要封装?

  • 保护数据安全,防止外部乱改数据
  • 代码结构统一、易于维护
  • 隐藏内部细节,只暴露可用接口

封装标准写法(私有化属性 + 读写接口)

class Person
{
private:// 私有属性:外部无法直接访问int age;public:// 设置年龄void setAge(int a){// 可以做数据校验if(a > 0 && a < 150){age = a;}else{
< "年龄不< endl;}}// 获取年龄int getAge(){return age;}
};

这就是封装的核心:数据私有,方法公开,可控访问

五、类内成员函数的两种写法

写法1:类内直接定义(简单函数用)

class A
{
public:void fun(){
< "类内< endl;}
};

写法2:类内声明,类外实现(工程常用)

class A
{
public:void fun();
};// 类外实现,需要加 类名::作用域
void A::fun()
{< "类外实现< endl;
}

六、对象的创建与使用

1. 栈上创建对象(最常用)

Student s1;

2. 匿名对象(用完即销毁)

Student();

3. new 动态创建对象(堆区)

Student *p = new Student;
delete p;

七、对象的内存空间(核心考点)

  1. 成员变量占内存,成员函数不占对象内存
  2. 所有对象共享成员函数,各自独有成员变量
  3. 空类大小为 1 字节(编译器占位,防止空对象无地址)

八、新手最容易踩的5大深坑

坑点1:忘记 class 默认 private 权限

直接写变量,外部访问报错:

class A{int num; // 默认 private
};
A a;
a.num = 10; // 报错!

坑点2:分不清 struct 和 class

  • struct:默认 public
  • class:默认 private

坑点3:类外实现函数忘记 类名:: 作用域

void fun(){} // 这是全局函数,不是类成员函数

坑点4:试图直接访问私有属性

必须通过 get/set 接口,不能直接读写

坑点5:混淆「类」和「对象」

类是模板,不能直接赋值、调用,必须实例化为对象

九、总结

  1. 类是模板,对象是实例,C++ OOP 一切皆对象
  2. 三种访问权限控制数据安全
  3. 封装核心:属性私有化,方法公开化
  4. 成员变量独立内存,成员函数全局共享
  5. class 默认私有,struct 默认公有

类与对象是 C++ 从「C语言思维」跨越到「面向对象思维」的分水岭,后续构造、析构、继承、多态全部依赖本章内容,是 C++ 重中之重。

学习心得

初次接触面向对象时,我很难理解“类和对象”的抽象关系,习惯了面向过程的变量写法。通过系统学习,我理解了封装的意义和权限控制的重要性,明白了类是规范、对象是实体的核心逻辑。后续写代码时,我会优先使用封装思想,将数据保护起来、通过接口操作,写出更规范、安全、面向对象风格的 C++ 代码。三篇博客(指针引用、数组、类)已经凑齐大一C++核心必考点

http://www.gsyq.cn/news/1569027.html

相关文章:

  • 魔兽争霸3终极优化指南:5个简单技巧让经典游戏在现代电脑上流畅运行
  • 2026年河源龙川黄金回收店铺实地探访,核心推荐龙川源奢汇及正规门店选择指南 - 行走在冷风中。
  • Ubuntu 12.04下Resilio Sync(原BTSync)本地去中心化同步实战
  • 基于LIN总线的车窗控制:MM908E624软件架构与防夹算法详解
  • 基于事件驱动的自动化游戏辅助系统:D3KeyHelper技术架构深度解析
  • 从MMC2114到MCF5282:ColdFire MCU迁移实战与性能优化指南
  • 炉石传说智能对战脚本:5步轻松实现自动化对战
  • 基于享乐博弈论的LLM多智能体联盟稳定性分析与CoalT协议实践
  • 如何搭建高性能游戏串流服务器:Sunshine配置与优化实战指南
  • iOS虚拟定位新选择:iFakeLocation的实用指南
  • PowerQUICC II PCI桥接器DMA传输与中断同步实战解析
  • Mac NTFS硬盘读写终极指南:免费开源方案解决跨平台文件传输难题
  • 兰州买猫买狗哪家靠谱?5家正规猫犬舍实测,皇克莱榜首 - 同城宠物优选基地
  • 第 19 章|页面返回和清理怎么处理
  • 低成本无线通信系统设计:基于8位MCU与ASK/OOK射频芯片的嵌入式方案
  • 20252811 2025-2026-2 《网络攻防实践》第十二周作业
  • 如何让数百小时的宝可梦冒险不再有后顾之忧:PKSM宝可梦存档管理器的完整解决方案
  • 河源市奢侈品回收哪家正规?2026年口碑靠谱门店盘点+避坑实测(含黄金+名包+名表+名酒回收) - 生活测评小能手
  • 告别水印困扰:用BiliDownload轻松下载无水印B站视频
  • WarcraftHelper:3分钟让你的魔兽争霸3在现代电脑上流畅运行
  • 合肥理工学校怎么报名?在哪报名?2026年6月22日最新发布 - 教育为先
  • 河源黄金/奢侈品回收避坑全攻略 本地靠谱商家TOP榜单推荐 - 生活测评小能手
  • DeepSeek-V4推理引擎重构:低延迟高吞吐生产落地指南
  • 企业级应用任意文件上传漏洞复现:从原理到实战的攻防演练
  • Qwen3-8B本地部署实战:vLLM+OpenAI兼容API全指南
  • 2026年包夫人暑期学生体态课:30天系统训练,改善孩子久坐歪身问题 - 大厂扫地工
  • WSL 相关操作
  • AI代码审计:大模型如何重构SAST与SCA,提升漏洞检测效率
  • 飞思卡尔SMAC轻量级MAC协议开发实战:从环境搭建到低功耗无线传感器网络应用
  • Windows Defender真的能永久禁用吗?开源工具defender-control给你答案!