C++ 中静态成员函数与非静态成员函数的区别

发布时间 - 2026-01-11 01:00:21    点击率:

静态成员函数与非静态成员函数的区别

数据成员:

静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员,类的每个实例都有一份拷贝(动态区)。

静态数据成员的访问:

静态数据成员是类的一部分,在产生任何实例之前已经存在,通过类名::静态成员变量名访问。

函数成员(都在代码区):

静态函数成员与非静态函数成员都为类所有,对象并不存在函数的拷贝。静态成员函数和非静态成员函数的根本区别在于非静态函数由对象名.或者对象指针->调用,调用时编译器会向函数传递this指针;静态成员函数则有类名::或者对象名.调用,编译器不向函数传递this指针,不识别对象个体,经常用来操作类的静态数据成员,要访问类的非静态成员可以通过对象来实现

内存角度分析:

类的静态成员(数据成员和函数成员)为类本身所有,在类加载的时候就会分配内存,可以通过类名直接访问;非静态成员(数据成员和函数成员)属于类的实例所有,所以只有在创建类的实例的时候才会分配内存,并通过实例去访问。

注意:类的静态数据成员是静态存储,它是静态生存周期,必须进行初始化。

注意:静态数据成员的初始化在类体外进行,前面不加static以免与一般静态变量或者对象混淆。

静态成员函数访问非静态成员报错:

类的静态成员在类加载的时候就已经分配内存,而此时类的非静态成员尚未分配内存,访问内存中不存在的东西自然会出错。

例子:

#include 
using namespace std; 
 
class Test 
{ 
  public: 
    Test(int a){ A = a; ++B;} 
    static void smf(Test tt); 
  private: 
    int A; 
    static int B; 
}; 
 
void Test::smf(Test tt) 
{ 
  cout << "tt.A : " << tt.A << endl;  //静态成员函数中通过对象来引用非静态成员 
  cout << "Test::B : " << Test::B << endl; 
  cout << "tt.B : " << tt.B << endl; 
} 
 
int Test::B = 0; //静态数据成员初始化的格式<数据类型><类名>::<静态数据成员名>=<值> 
 
int main() 
{ 
  Test t1(100); 
  Test t2(200); 
  Test::smf(t1); 
  Test::smf(t2);//静态成员函数调用时不用对象名 
 
  system("pause"); 
  return 0; 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++静态成员函数与非静态成员函数的区别  # C++  # 静态成员函数区别  # C++的静态成员变量和静态成员函数详解  # C++类的静态成员变量与静态成员函数详解  # C++中静态成员函数访问非静态成员的实例  # C++静态成员变量和静态成员函数的使用方法总结  # C++静态成员函数不能调用非静态成员变量(详解)  # 深入解析C++编程中的静态成员函数  # 关于C++静态成员函数访问非静态成员变量的问题  # C++类静态成员与类静态成员函数详解  # C++分析讲解类的静态成员函数如何使用  # 可以通过  # 与非  # 加载  # 就会  # 都有  # 都在  # 才会  # 它是  # 希望能  # 体外  # 报错  # 谢谢大家  # 不加  # 来实现  # 都为  # 则有  # 中不  # 不向  # 会向  # 变量名 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何快速搭建虚拟主机网站?新手必看指南  深圳网站制作的公司有哪些,dido官方网站?  如何快速配置高效服务器建站软件?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  奇安信“盘古石”团队突破 iOS 26.1 提权  香港服务器建站指南:免备案优势与SEO优化技巧全解析  高端建站如何打造兼具美学与转化的品牌官网?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  如何快速搭建自助建站会员专属系统?  javascript基本数据类型及类型检测常用方法小结  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  JS去除重复并统计数量的实现方法  昵图网官方站入口 昵图网素材图库官网入口  如何用PHP快速搭建高效网站?分步指南  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel如何使用Telescope进行调试?(安装和使用教程)  如何实现javascript表单验证_正则表达式有哪些实用技巧  南京网站制作费用,南京远驱官方网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel如何实现API速率限制?(Rate Limiting教程)  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何挑选高效建站主机与优质域名?  Laravel怎么使用Intervention Image库处理图片上传和缩放  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel怎么实现验证码(Captcha)功能  油猴 教程,油猴搜脚本为什么会网页无法显示?  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  JS实现鼠标移上去显示图片或微信二维码  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何用PHP工具快速搭建高效网站?  用yum安装MySQLdb模块的步骤方法  C语言设计一个闪闪的圣诞树  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  🚀拖拽式CMS建站能否实现高效与个性化并存?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Android自定义控件实现温度旋转按钮效果  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel中的Facade(门面)到底是什么原理