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

C++核心三要素:封装、实例化与this

好的,我们开始深入探讨C++中类与对象的三大核心概念:封装、实例化与this指针。


一、类的封装:数据与行为的结合

封装是面向对象编程的基石,它将数据(成员变量)和操作数据的方法(成员函数)捆绑成一个独立的单元——类。通过访问控制符(publicprivateprotected)实现信息隐藏:

class Rectangle { private: // 隐藏内部实现 double width; double height; public: // 对外接口 void setDimensions(double w, double h) { width = w; height = h; } double getArea() { return width * height; } };

关键点

  • private成员:仅类内函数可访问,外部不可直接修改
  • public接口:提供可控的数据访问路径
  • 体现了“高内聚,低耦合”的设计思想

二、对象实例化:类的具象化

类如同蓝图,对象则是根据蓝图建造的实体。实例化有两种方式:

1. 栈内存分配(自动生命周期)
Rectangle rect; // 默认构造 rect.setDimensions(3, 4); cout << rect.getArea(); // 输出:12
2. 堆内存分配(手动管理)
Rectangle* pRect = new Rectangle(); // 动态分配 pRect->setDimensions(5, 6); cout << pRect->getArea(); // 输出:30 delete pRect; // 必须手动释放!

三、this指针:对象的自我标识

每个成员函数隐含的常量指针,指向调用该函数的对象实例。典型应用场景:

1. 解决命名冲突
class Student { private: string name; public: void setName(string name) { this->name = name; // 区分成员变量与参数 } };
2. 链式调用
class Counter { int count; public: Counter& increment() { count++; return *this; // 返回对象自身 } }; Counter c; c.increment().increment(); // 连续调用
3. 内存本质
// 伪代码展示底层行为 void setDimensions(Rectangle* this, double w, double h) { this->width = w; this->height = h; }

四、综合应用示例

class BankAccount { private: double balance; string owner; public: BankAccount(string name) : owner(name), balance(0) {} void deposit(double amount) { this->balance += amount; // 显式使用this } bool withdraw(double amount) { if (amount <= balance) { balance -= amount; return true; } return false; } }; // 使用示例 BankAccount acc("张三"); acc.deposit(1000.0); acc.withdraw(200.0);

要点总结

  1. 封装:通过访问控制实现数据保护
  2. 实例化
    • 栈对象:自动管理生命周期
    • 堆对象:需手动new/delete
  3. this指针
    • 隐含的常量指针ClassName* const this
    • 指向当前调用对象
    • 避免命名冲突,支持链式调用

理解这些基础概念,是掌握C++面向对象编程的关键第一步。下篇将深入探讨构造函数、析构函数及拷贝控制等进阶内容。

http://www.jsqmd.com/news/335157/

相关文章:

  • Flutter 三端应用实战:OpenHarmony “呼吸之境”——在焦虑洪流中,为你筑一座内心的岛屿
  • Recovery Toolbox for Word(Word修复软件)
  • Recovery Toolbox for PDF(PDF文件修复工具)
  • SolidWorks基础设计之拉伸和切除实体
  • C++11核心特性解析与实战指南
  • SolidWorks基础设计之线性阵列和圆周阵列
  • 结构风荷载理论与Matlab计算
  • React Native for OpenHarmony:ActivityIndicator 动画实现详解
  • 如何在大数据中使用Cassandra进行数据挖掘
  • <span class=“js_title_inner“>卓正医疗开启招股:拟募资3亿 2月6日上市 明略科技与何小鹏参与认购</span>
  • 2026年豆包AI推广服务商全景评测:GEO如何助力品牌抢占AI流量入口? - 品牌2025
  • 深入解析C++智能指针原理
  • Easy Cut Studio(刻绘软件)
  • 开源版 Coze: 创建智能体-每日 ERP 系统巡检计划
  • <span class=“js_title_inner“>爱芯元智开启招股:获1.85亿美元基石投资 9个月亏8.6亿 2月10日港股上市</span>
  • Pyhton中的POM思想
  • GraphQL与REST API对比:何时选择哪种API设计模式
  • 亲测一个“野生”想法:用AI写量化策略,到底靠不靠谱?
  • App自动化环境配置及安装
  • 2026年GEO服务商权威评测与选型指南:AI时代的企业获客新基建 - 品牌2025
  • Docker多阶段构建:大幅减小镜像体积的实用技巧
  • Python中的PO模型的实例
  • AI原生应用里语义搜索的智能交互体验
  • 2-2午夜盘思
  • 傅立叶光学的Matlab实现方法
  • 大数据领域Doris的集群扩容与缩容方案
  • Serverless架构实战:用AWS Lambda构建无服务器应用
  • 基于SSH的房地产在线交易系统开发与实现
  • 【回溯】二叉树的所有路径
  • 机器人中的磁编码器