MFC C++类中的静态成员变量和静态成员函数的作用

原创 2013年12月02日 14:39:39
数据成员可以分静态变量、非静态变量两种. 
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 

非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中.. 

一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数.. 

分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及到类,第二方面相对于面向对象而言,主要说明static在类中的作用。 

一、在面向过程设计中的static关键字 

1、静态全局变量 

定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。 

特点: 
  A、该变量在全局数据区分配内存。 
  B、初始化:如果不显式初始化,那么将被隐式初始化为0(自动变量是随机的,除非显式地初始化)。 
  C、访变量只在本源文件可见,严格的讲应该为定义之处开始到本文件结束。 

  例(摘于C++程序设计教程---钱能主编P103):        //file1.cpp 
        //Example 1 
                     #include 
                     voidfn(); 
                     static intn; //定义静态全局变量 
                     voidmain() 
                    { 
            n=20; 
             cout< <
            fn(); 
                    } 

                      voidfn() 
                     { 
            n++; 
             cout< <
                     } 

  D、文件作用域下声明的const的常量默认为static存储类型。 

静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图: 
  代码区 
全局数据区 
堆区 
栈区 


  一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example1中的代码中将 

学习笔记之深入浅出MFC 第8章 C++重要特性----静态变量(static)

静态成员(变量和函数) 静态成员变量或函数有什么用呢?前面我们讲了类及类成员,一般类是指抽象的特性,必须对象化(实例化)之后才能进行操作。那么,假如类的某一个变量都是一样的值,没必要一个对象一个对象...
  • walkman_lfq
  • walkman_lfq
  • 2016年05月02日 19:57
  • 686

C++静态成员变量和静态成员函数使用总结

C++静态成员变量和静态成员函数使用总结: 一.静态成员变量:          类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员...
  • fanyun_01
  • fanyun_01
  • 2016年05月16日 09:11
  • 7418

关键字static的作用是什么? C++类中的静态成员变量和静态成员函数的作用

本文转自《面试宝典》 1,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时,仍维持上次的值;...
  • taotaoah
  • taotaoah
  • 2016年10月17日 22:12
  • 1343

C++类中的静态成员变量和静态成员函数的作用

数据成员可以分为静态变量、非静态变量两种。 静态成员:静态
  • kerry0071
  • kerry0071
  • 2014年05月14日 18:22
  • 23509

再探私有/公有静态成员变量与私有静态成员方法

问题1: 为什么在类内的静态成员定义后,要到类的外部在定义和初始化? 问题2:为什么类的静态成员在类外部的定义只能一次? 问题3:私有的静态成员变量如何初始化,访问权限还是私有么? 问题4:在程序执行...
  • tianjian789
  • tianjian789
  • 2015年09月06日 12:20
  • 1980

静态成员函数不可以访问类中的成员变量

原因:因为静态成员函数在类对象构造时没有分配this指针(非静态成员函数则具有this指针),相当于是全局函数,是属于类的,而类的成员变量只有类对象(实例)能够访问,成员变量只有实例化才有意义。 解...
  • Kelvin_Yan
  • Kelvin_Yan
  • 2016年11月15日 15:51
  • 1895

类的静态成员函数带来了什么好处,应该在什么时候使用?

类的静态成员函数带来了什么好处,应该在什么时候使用? 标签: math设计模式算法api编程存储 2011-10-13 18:15 3382人阅读 评论(0) 收藏 举报  分类...
  • boshuzhang
  • boshuzhang
  • 2016年08月22日 12:16
  • 1470

c++静态变量,静态函数,私有静态变量的使用小记

自从上了小学才发现,记忆力大不如前了,看来小的时候没有开发出来,导致记忆模块荒凉遍野,现在很多学过,记过,用过的东西,一段时间以后发现除了有些印象外,再无其他,所以正证明那句话:“好记性不如烂笔头”。...
  • lxp116
  • lxp116
  • 2014年02月20日 11:06
  • 4143

静态成员函数和普通成员函数的区别

成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加->;)调用,这时将向函数传递this...
  • liujianfei526
  • liujianfei526
  • 2016年01月22日 16:32
  • 2915

笔记八:静态变量、静态成员函数、函数指针、静态函数指针

静态变量http://www.cnblogs.com/dongzhiquan/archive/2009/07/21/1994792.html 一文对静态变量进行了充分的阐述,现整理部分重要内容如下,加...
  • u014033518
  • u014033518
  • 2016年05月23日 21:39
  • 807
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC C++类中的静态成员变量和静态成员函数的作用
举报原因:
原因补充:

(最多只允许输入30个字)