news 2026/5/27 12:34:02

【C++】类与对象及this指针_Jacky

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++】类与对象及this指针_Jacky

类的定义与成员种类

类通过classstruct关键字定义,包含以下成员:

  • 成员变量:描述对象属性(如_year_capacity)。
  • 成员函数:定义对象行为(如Init()Push())。
  • 静态成员:类级别共享数据或函数(static修饰)。
  • 其他:类型别名、枚举、嵌套类等。

示例

class Date { public: void Init(int y, int m, int d) { _year = y; _month = m; _day = d; } void Print() const { std::cout << _year << "/" << _month << "/" << _day; } private: int _year = 1970, _month = 1, _day = 1; };

访问限定符与封装惯例

  • public:对外接口(如Print())。
  • private:内部实现细节(如_year)。
  • protected:派生类可访问的细节。
  • 命名惯例:成员变量常加_m_前缀(如_capacity)。

类域与作用域解析

类外定义成员函数需指定类域:

void Stack::Init(int n) { /* 实现 */ }

实例化与对象语义

对象大小规则

  • 仅非静态成员变量占用空间。
  • 空类对象大小为 1 字节(占位标识)。
  • 内存对齐:成员按对齐数排列,总大小为最大对齐数的整数倍。

示例

class A { char c; int i; }; // sizeof(A) = 8(1 + 3填充 + 4)

this 指针机制

隐式转换

  • 成员函数调用obj.f()被转为f(&obj)
  • 成员访问_year实际为this->_year

const 成员函数

  • this类型为const Class*,禁止修改非mutable成员。
  • 风险:空指针调用成员函数(如nullptr->Print())是未定义行为。

C 与 C++ 实现 Stack 对比

C 版本(过程式)
typedef struct { int* a; int top, capacity; } Stack; void Push(Stack* s, int x) { if (s->top == s->capacity) { s->capacity = s->capacity ? s->capacity * 2 : 4; s->a = realloc(s->a, s->capacity * sizeof(int)); } s->a[s->top++] = x; }
C++ 现代版本(RAII)
class Stack { public: Stack() : _data(std::vector<int>()) {} void Push(int x) { _data.push_back(x); } private: std::vector<int> _data; };

关键差异

  • 资源管理:C 需手动malloc/free;C++ 依赖std::vector自动管理。
  • 异常安全:C++ 版本在扩容失败时自动回滚,C 需手动处理。

最佳实践

  1. 优先使用 RAII:避免手动资源管理(如new/delete)。
  2. const 正确性:为只读操作提供const重载。
  3. 避免空指针:调用成员函数前检查对象有效性。

习题示例

  • 空类class Empty {}的对象大小为1 字节
  • const成员函数内修改成员变量会导致编译错误

编程语言C++mobile.julangok.com++C语言的魅力
编程语言C++news.julangok.com++C语言的魅力
编程语言C++soft.julangok.com++C语言的魅力
编程语言C++www.share.julangok.com++C语言的魅力
编程语言C++map.julangok.com++C语言的魅力
编程语言C++www.blog.julangok.com++C语言的魅力
编程语言C++read.share.julangok.com++C语言的魅力
编程语言C++info.julangok.com++C语言的魅力
编程语言C++julangok.com++C语言的魅力
编程语言C++www.julangok.com++C语言的魅力
编程语言C++mobile.lanjun123.com++C语言的魅力
编程语言C++news.lanjun123.com++C语言的魅力
编程语言C++soft.lanjun123.com++C语言的魅力
编程语言C++www.share.lanjun123.com++C语言的魅力
编程语言C++map.lanjun123.com++C语言的魅力
编程语言C++www.blog.lanjun123.com++C语言的魅力
编程语言C++read.share.lanjun123.com++C语言的魅力
编程语言C++info.lanjun123.com++C语言的魅力
编程语言C++lanjun123.com++C语言的魅力
编程语言C++www.lanjun123.com++C语言的魅力
编程语言C++mobile.mingmasoft.com++C语言的魅力
编程语言C++news.mingmasoft.com++C语言的魅力
编程语言C++soft.mingmasoft.com++C语言的魅力
编程语言C++www.share.mingmasoft.com++C语言的魅力
编程语言C++map.mingmasoft.com++C语言的魅力
编程语言C++www.blog.mingmasoft.com++C语言的魅力
编程语言C++read.share.mingmasoft.com++C语言的魅力
编程语言C++info.mingmasoft.com++C语言的魅力
编程语言C++mingmasoft.com++C语言的魅力
编程语言C++www.mingmasoft.com++C语言的魅力
编程语言C++mobile.shanhongwangluo.com++C语言的魅力
编程语言C++news.shanhongwangluo.com++C语言的魅力
编程语言C++soft.shanhongwangluo.com++C语言的魅力
编程语言C++www.share.shanhongwangluo.com++C语言的魅力
编程语言C++map.shanhongwangluo.com++C语言的魅力
编程语言C++www.blog.shanhongwangluo.com++C语言的魅力
编程语言C++read.share.shanhongwangluo.com++C语言的魅力
编程语言C++info.shanhongwangluo.com++C语言的魅力
编程语言C++shanhongwangluo.com++C语言的魅力
编程语言C++www.shanhongwangluo.com++C语言的魅力
编程语言C++mobile.ywmmz.com++C语言的魅力
编程语言C++news.ywmmz.com++C语言的魅力
编程语言C++soft.ywmmz.com++C语言的魅力
编程语言C++www.share.ywmmz.com++C语言的魅力
编程语言C++map.ywmmz.com++C语言的魅力
编程语言C++www.blog.ywmmz.com++C语言的魅力
编程语言C++read.share.ywmmz.com++C语言的魅力
编程语言C++info.ywmmz.com++C语言的魅力
编程语言C++ywmmz.com++C语言的魅力
编程语言C++www.ywmmz.comC语言的魅力
编程语言C++mobile.fugezc.com++C语言的魅力
编程语言C++news.fugezc.com++C语言的魅力
编程语言C++soft.fugezc.com++C语言的魅力
编程语言C++www.share.fugezc.com++C语言的魅力
编程语言C++map.fugezc.com++C语言的魅力
编程语言C++www.blog.fugezc.com++C语言的魅力
编程语言C++read.share.fugezc.com++C语言的魅力
编程语言C++info.fugezc.com++C语言的魅力
编程语言C++fugezc.com++C语言的魅力
编程语言C++www.fugezc.com++C语言的魅力
编程语言C++mobile.weskyking.com++C语言的魅力
编程语言C++news.weskyking.com++C语言的魅力
编程语言C++soft.weskyking.com++C语言的魅力
编程语言C++www.share.weskyking.com++C语言的魅力
编程语言C++map.weskyking.com++C语言的魅力
编程语言C++www.blog.weskyking.com++C语言的魅力
编程语言C++read.share.weskyking.com++C语言的魅力
编程语言C++info.weskyking.com++C语言的魅力
编程语言C++weskyking.com++C语言的魅力
编程语言C++www.weskyking.com++C语言的魅力
编程语言C++mobile.wande8.com++C语言的魅力
编程语言C++news.wande8.com++C语言的魅力
编程语言C++soft.wande8.com++C语言的魅力
编程语言C++www.share.wande8.com++C语言的魅力
编程语言C++map.wande8.com++C语言的魅力
编程语言C++www.blog.wande8.com++C语言的魅力
编程语言C++read.share.wande8.com++C语言的魅力
编程语言C++info.wande8.com++C语言的魅力
编程语言C++wande8.com++C语言的魅力
编程语言C++www.wande8.com++C语言的魅力
编程语言C++mobile.aipenbot.com++C语言的魅力
编程语言C++news.aipenbot.com++C语言的魅力
编程语言C++soft.aipenbot.com++C语言的魅力
编程语言C++www.share.aipenbot.com++C语言的魅力
编程语言C++map.aipenbot.com++C语言的魅力
编程语言C++www.blog.aipenbot.com++C语言的魅力
编程语言C++read.share.aipenbot.com++C语言的魅力
编程语言C++info.aipenbot.com++C语言的魅力
编程语言C++aipenbot.com++C语言的魅力
编程语言C++www.aipenbot.com++C语言的魅力
编程语言C++mobile.heijiantou.com++C语言的魅力
编程语言C++news.heijiantou.com++C语言的魅力
编程语言C++soft.heijiantou.com++C语言的魅力
编程语言C++www.share.heijiantou.com++C语言的魅力
编程语言C++map.heijiantou.com++C语言的魅力
编程语言C++www.blog.heijiantou.com++C语言的魅力
编程语言C++read.share.heijiantou.com++C语言的魅力
编程语言C++info.heijiantou.com++C语言的魅力
编程语言C++heijiantou.com++C语言的魅力
编程语言C++www.heijiantou.com++C语言的魅力
编程语言C++mobile.wuxiangxuehui.com++C语言的魅力
编程语言C++news.wuxiangxuehui.com++C语言的魅力
编程语言C++soft.wuxiangxuehui.com++C语言的魅力
编程语言C++www.share.wuxiangxuehui.com++C语言的魅力
编程语言C++map.wuxiangxuehui.com++C语言的魅力
编程语言C++www.blog.wuxiangxuehui.com++C语言的魅力
编程语言C++read.share.wuxiangxuehui.com++C语言的魅力
编程语言C++info.wuxiangxuehui.com++C语言的魅力
编程语言C++wuxiangxuehui.com++C语言的魅力
编程语言C++www.wuxiangxuehui.com++C语言的魅力
编程语言C++mobile.yqsuyuan.com++C语言的魅力
编程语言C++news.yqsuyuan.com++C语言的魅力
编程语言C++soft.yqsuyuan.com++C语言的魅力
编程语言C++www.share.yqsuyuan.com++C语言的魅力
编程语言C++map.yqsuyuan.com++C语言的魅力
编程语言C++www.blog.yqsuyuan.com++C语言的魅力
编程语言C++read.share.yqsuyuan.com++C语言的魅力
编程语言C++info.yqsuyuan.com++C语言的魅力
编程语言C++yqsuyuan.com++C语言的魅力
编程语言C++www.yqsuyuan.com++C语言的魅力
编程语言C++mobile.splsfloor.com++C语言的魅力
编程语言C++news.splsfloor.com++C语言的魅力
编程语言C++soft.splsfloor.com++C语言的魅力
编程语言C++www.share.splsfloor.com++C语言的魅力
编程语言C++map.splsfloor.com++C语言的魅力
编程语言C++www.blog.splsfloor.com++C语言的魅力
编程语言C++read.share.splsfloor.com++C语言的魅力
编程语言C++info.splsfloor.com++C语言的魅力
编程语言C++splsfloor.com++C语言的魅力
编程语言C++www.splsfloor.com++C语言的魅力
编程语言C++mobile.zifucn.com++C语言的魅力
编程语言C++news.zifucn.com++C语言的魅力
编程语言C++soft.zifucn.com++C语言的魅力
编程语言C++www.share.zifucn.com++C语言的魅力
编程语言C++map.zifucn.com++C语言的魅力
编程语言C++www.blog.zifucn.com++C语言的魅力
编程语言C++read.share.zifucn.com++C语言的魅力
编程语言C++info.zifucn.com++C语言的魅力
编程语言C++zifucn.com++C语言的魅力
编程语言C++www.zifucn.com++C语言的魅力

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

25个免费Illustrator脚本:彻底改变你的设计工作流程

25个免费Illustrator脚本&#xff1a;彻底改变你的设计工作流程 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否厌倦了在Adobe Illustrator中重复那些枯燥的设计任务&#xf…

作者头像 李华
网站建设 2026/5/27 12:30:13

浏览器FLV播放革命:flv.js技术深度解析与实战应用

浏览器FLV播放革命&#xff1a;flv.js技术深度解析与实战应用 【免费下载链接】flv.js HTML5 FLV Player 项目地址: https://gitcode.com/gh_mirrors/fl/flv.js 当我们需要在Web浏览器中播放FLV格式视频时&#xff0c;传统方案往往依赖Flash插件或复杂的转码服务。flv.j…

作者头像 李华
网站建设 2026/5/27 12:29:24

AI应用创业公司如何利用Taotoken应对模型API的稳定性挑战

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 AI应用创业公司如何利用Taotoken应对模型API的稳定性挑战 对于AI应用创业公司而言&#xff0c;产品的核心体验高度依赖于底层大模型…

作者头像 李华
网站建设 2026/5/27 12:29:23

OrangeHRM人力资源管理系统:企业级部署与使用完全指南

OrangeHRM人力资源管理系统&#xff1a;企业级部署与使用完全指南 【免费下载链接】orangehrm OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures all the essential functionalities required for any enterprise. 项目地址: https://gi…

作者头像 李华