• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ 中静态成员函数与非静态成员函数的区别

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++中的静态变量,c++中常量,c++中有哪些类库,c++中的数学函数,c++中char什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

数据成员:

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

静态数据成员的访问:

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

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

静态函数成员与非静态函数成员都为类所有,对象并不存在函数的拷贝。静态成员函数和非静态成员函数的根本区别在于非静态函数由对象名.或者对象指针->调用,调用时编译器会向函数传递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; 
}
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 中静态成员函数与非静态成员函数的区别
  • C++中 静态局部变量实例详解
  • 解析C++中的虚拟函数及其静态类型和动态类型
  • C++之类的静态变量
  • C++中关于[]静态数组和new分配的动态数组的区别分析
  • C++中静态存储区与栈以及堆的区别详解
  • 深入理解C++的动态绑定与静态绑定的应用详解

相关文章

  • 2017-05-28C++设计模式编程中的观察者模式使用示例
  • 2017-05-28C语言 动态内存分配的详解及实例
  • 2017-05-28C语言实现支持动态拓展和销毁的线程池
  • 2017-05-28关于C++中0是十进制还是八进制的问题
  • 2017-05-28关于STL中的map容器的一些总结
  • 2017-05-28C++利用MySQL API连接和操作数据库实例详解
  • 2017-05-28用C语言来实现一个简单的虚拟机
  • 2017-05-28Recommended C Style and Coding Standards中文翻译版第1/3页
  • 2017-05-28c语言clock函数使用示例
  • 2017-05-28C++实现二叉树非递归遍历方法实例总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++实现将简单密码译回原文的方法
    • Find K-th Smallest Pair Distance:查找数组元素中差值第K大的两个元素的差值
    • C++编写生成不重复的随机数代码
    • VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法
    • C和C++ const的声明差异
    • C语言实现计算树的深度的方法
    • 大数据情况下桶排序算法的运用与C++代码实现示例
    • 封装常用正则表达式的用法
    • 利用ace的ACE_Task等类实现线程池的方法详解
    • 关于数组做函数参数的问题集合汇总

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有