常成员函数用于保证不修改对象状态,可被const对象调用并访问非静态成员变量(只读),而静态成员函数不依赖对象实例,无this指针,只能访问静态成员,通过类名直接调用,两者不可同时定义为const static。

在C++中,成员函数是类的重要组成部分,用于操作类的数据成员或实现特定功能。根据使用场景和特性,成员函数可以分为普通成员函数、常成员函数(const成员函数)和静态成员函数(static成员函数)。下面分别介绍它们的定义方式以及常成员函数与静态成员函数的主要区别。
一、成员函数的定义方式
普通成员函数
在类内部声明,在类外部定义时需要加上类名和作用域运算符
::
:
class MyClass {public: void func(); // 声明};void MyClass::func() { // 定义 // 函数体}
常成员函数
在函数声明和定义的参数列表后加上
const
关键字,表示该函数不会修改对象的成员变量:
class MyClass {public: void func() const; // 声明为 const 成员函数};void MyClass::func() const { // 定义时也要加 const // 不能修改非 mutable 的成员变量}
静态成员函数
使用
static
关键字声明,属于类本身而非类的某个对象:
class MyClass {public: static void func(); // 静态成员函数声明};void MyClass::func() { // 定义时不加 static // 函数体}
二、常成员函数与静态成员函数的区别
调用对象只能由类的实例(对象)调用不依赖对象,可通过类名直接调用访问权限可以访问非静态成员变量(只读)和静态成员只能访问静态成员变量和静态成员函数隐含参数有@@######@@指针,指向调用它的对象没有@@######@@指针修改成员不能修改普通成员变量(除非是@@######@@)不能访问非静态成员变量,自然也无法修改用途用于保证不修改对象状态的函数,如@@######@@类函数用于实现与类相关但不依赖具体对象的功能,如计数、工具函数
三、使用场景举例
常成员函数适用场景:
获取对象状态但不修改它被
this
对象调用提高程序安全性与可读性
this
静态成员函数适用场景:
实现工厂方法操作静态数据成员(如对象计数)工具函数(如数学计算)
mutable
四、关键点总结
常成员函数的核心是“承诺不修改对象”,适用于所有对象(包括
get()
对象),可以访问非静态数据但只能读。静态成员函数的核心是“不依赖对象”,没有
const
指针,只能操作静态成员,通过类名直接调用。两者可以同时存在,但不能将一个函数同时定义为
class Student { int id;public: int getId() const { // const函数 return id; // 只读访问 }};const Student s{1001};s.getId(); // 只有 const 成员函数才能被 const 对象调用
(语法错误,static 本身就不需要 this,const 无意义)。
基本上就这些。理解它们的关键在于搞清楚“是否依赖对象实例”和“是否修改对象状态”这两个维度。
class Counter { static int count;public: Counter() { count++; } static int getCount() { // 静态函数 return count; }};int Counter::count = 0;cout << Counter::getCount(); // 无需创建对象即可调用
const
this
const static
以上就是成员函数怎样定义 常成员函数与静态成员函数区别的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1472423.html
微信扫一扫
支付宝扫一扫