2026/4/4 22:21:53
网站建设
项目流程
门户网站怎么建设需要多长时间,html5标签属性大全,爱做奈官方网站,wordpress元关键词目录
一、前言
二、什么是成员函数#xff08;Member Function#xff09;
2.1 正式定义
2.2 为什么需要成员函数#xff08;意义#xff09;
1#xff09;让“数据 行为”形成封装
2#xff09;自动访问成员变量#xff08;不需额外传参#xff09;
3#xf…目录一、前言二、什么是成员函数Member Function2.1 正式定义2.2 为什么需要成员函数意义1让“数据 行为”形成封装2自动访问成员变量不需额外传参3让“第一个参数”隐式传递this 指针三、成员函数的核心this 指针3.1 this 是什么四、const 成员函数不会修改当前对象五、运算符重载中的成员函数核心重点5.1 成员函数形式的运算符重载5.2 参数解读const Vec2 other5.3 完整示例Vec2 向量 运算符六、表格 — 成员函数 vs 普通函数七、面试常问7.1 成员函数和普通函数的区别7.2 成员函数后面的 const 修饰的是什么7.3 为什么 operator 通常写成员函数八、总结一、前言成员函数member function是 C 类最核心的组成部分但很多初学者只知道“写在类里的函数就是成员函数”却没有真正理解为什么要有成员函数成员函数和普通函数有什么本质区别this 指针到底是什么成员函数后面的 const 修饰哪里运算符重载为什么经常写成员函数a b 为什么能翻译成 a.operator(b)本篇文章一次性全部展开让你彻底搞懂 C 成员函数的底层原理与语法细节。在之前的学习中已经详细介绍了运算符重载 以及 构造函数和析构函数的详细内容链接如下一篇搞懂 C 重载函数重载 运算符重载从入门到会用含 、、 实战-CSDN博客https://blog.csdn.net/m0_58954356/article/details/155323257?sharetypeblogdetailsharerId155323257sharereferPCsharesourcem0_58954356spm1011.2480.3001.8118C 成员函数运算符重载深度解析-CSDN博客https://blog.csdn.net/m0_58954356/article/details/155754511?spm1001.2014.3001.5502C 内存机制详细全讲解构造函数、析构函数、new/delete、栈 vs 堆 完整指南小白教程_结构体构造函数是堆内存还是栈内存-CSDN博客https://blog.csdn.net/m0_58954356/article/details/155098091?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171491c908ae9b99b3e03fdcd0a5d077%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_id171491c908ae9b99b3e03fdcd0a5d077biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-155098091-null-null.nonecaseutm_term%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0spm1018.2226.3001.4450二、什么是成员函数Member Function2.1 正式定义成员函数是定义在类内部、专门用来操作该类对象的函数。形式class ClassName { public: 返回类型 函数名(参数列表) [const]; };它具有普通函数所不具备的特性属于类自动携带隐藏参数this能访问类的所有成员包括 private支持const 成员函数语义调用方式直观对象.函数()2.2 为什么需要成员函数意义1让“数据 行为”形成封装Car c; c.startEngine(); c.brake();更符合面向对象语义。2自动访问成员变量不需额外传参speed speed 10; // 实际是 this-speed 10;如果用普通函数accelerate(c, 10);语义明显不如成员函数自然。3让“第一个参数”隐式传递this 指针你写a b;本质是a.operator(b);再底层一点Vec2::operator(a, b);成员函数的语法让调用更自然。三、成员函数的核心this 指针3.1 this 是什么每个成员函数内部都存在一个隐式参数ClassName* this;它指向调用这个成员函数的对象本身。例class Vec2 { public: double x, y; void print() { std::cout x , y; } };本质等价于void print(Vec2* this) { std::cout this-x , this-y; }所以x等价于this-xy等价于this-y四、const 成员函数不会修改当前对象形式返回类型 函数名() const;这个 const 修饰整个函数而不是返回值。含义承诺不修改成员变量除非 mutablethis 指针的类型变成const ClassName*可在 const 对象上调用示例class Vec2 { public: double x, y; double length() const { return std::sqrt(x * x y * y); } }; const Vec2 v(3, 4); v.length(); // ✔ 允许因 length 是 const 成员函数如果不是const成员函数会编译报错。五、运算符重载中的成员函数核心重点5.1 成员函数形式的运算符重载你写Vec2 c a b;编译器翻译成Vec2 c a.operator(b);成员函数的定义Vec2 Vec2::operator(const Vec2 other) const;再底层理解Vec2::operator(a, b);5.2 参数解读const Vec2 other含义引用传递避免拷贝提高效率。const表示不能修改 otherother.x 10; // ❌ 编译报错为什么要这样写安全、高效、通用可接受 const、非 const、临时对象5.3 完整示例Vec2 向量 运算符class Vec2 { public: double x, y; Vec2(double x 0, double y 0) : x(x), y(y) {} // 成员函数 const 引用参数 Vec2 operator(const Vec2 other) const { return Vec2(x other.x, y other.y); } // 只读成员函数 double length() const { return std::sqrt(x * x y * y); } };调用Vec2 a(1, 2); Vec2 b(3, 4); Vec2 c a b; // a.operator(b) double len c.length();六、表格 — 成员函数 vs 普通函数特性成员函数普通函数属于类✔✘隐式 this✔✘能否访问 private✔✘除非 friend是否支持 const✔✘调用方式对象.函数()函数(对象)常见用途封装、运算符重载工具函数七、面试常问7.1 成员函数和普通函数的区别成员函数多一个 this 隐式参数能访问类内部所有成员支持 const 成员函数属于类的一部分7.2 成员函数后面的 const 修饰的是什么→ 修饰整个函数表示该函数不会修改当前对象。7.3 为什么 operator 通常写成员函数✔ 左操作数天然绑定到 this✔ 语义自然 a b✔ 能访问 private 成员✔ const、引用参数用法更直观八、总结成员函数 属于类的函数 隐式 this 能访问所有成员 支持 const 语义是 C 面向对象的核心。