静态成员变量成员函数

思考:每个变量,拥有属性。有没有一些属性,归所有对象拥有?

4.1静态成员变量

1)定义静态成员变量

  • 关键字 static 可以用于说明一个类的成员,

静态成员提供了一个同类对象的共享机制

  • 把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员
  • 静态成员局部于类,它不是对象成员

例如:

#include<iostream>

using namespace std;

class  counter

{

static  int  num ; //声明与定义静态数据成员

public :

void  setnum ( int i ) { num = i ; }         //成员函数访问静态数据成员

void  shownum() { cout << num << '\t' ; }

} ;

int  counter :: num = 0 ;//声明与定义静态数据成员

void main ()

{   counter  a , b ;

a.shownum() ; //调用成员函数访问私有静态数据成员

b.shownum() ;

a.setnum(10) ;

a.shownum() ;

b.shownum() ;

}

从结果可以看出,访问的是同一个静态数据成员

2)使用静态成员变量

// 例5-14  使用公有静态数据成员

#include<iostream.h>

class  counter

{ public :

counter (int a) { mem = a; }

int mem;                //公有数据成员

static  int  Smem ;   //公有静态数据成员

} ;

int  counter :: Smem = 1 ;      //初始值为1

void main()

{   counter c(5);

int i ;

for( i = 0 ; i < 5 ; i ++ )

{ counter::Smem += i ;

cout << counter::Smem << '\t' ;  //访问静态成员变量方法2

}

cout<<endl;

cout<<"c.Smem = "<<c.Smem<<endl; //访问静态成员变量方法1

cout<<"c.mem = "<<c.mem<<endl;

}

4.2静态成员函数

1)概念

  • 静态成员函数数冠以关键字static
  •  静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针
  •  在类外调用静态成员函数用 “类名 :: ”作限定词,或通过对象调用

2)案例

3)疑难问题:静态成员函数中,不能使用普通变量。

//静态成员变量属于整个类的,分不清楚,是那个具体对象的属性。

 #include <iostream>
using namespace std; class BB
{
public:
void printC()
{
cout<<"c:"<<c<<endl;
}
void AddC()
{
c = c + ;
}
static void getC() //静态成员函数
{
cout<<"c:"<<c<<endl;
//请在静态成员函数中,能调用 普通成员属性 或者 普通成员函数吗?
cout<<"a:"<<a<<endl; //error C2597: 对非静态成员“BB::a”的非法引用
}
protected:
private:
int a;
int b;
static int c; //静态成员变量
}; //静态函数中 不能使用 普通成员变量 普通成员函数 ..
int BB::c = ; void main()
{ BB b1, b2, b3;
b1.printC(); //
b2.AddC(); //
b3.printC(); //11 //静态成员函数的调用方法
b3.getC(); //用对象.
BB::getC();//类:: cout<<"hello..."<<endl;
system("pause");
return ;
}

c++——静态成员变量成员函数的更多相关文章

  1. java 静态代码块 代码块 构造函数 静态成员变量 成员变量的初始化顺序

    没有父类的情况 1,静态代码块-->静态成员变量-->成员变量(实例属性)-->代码块-->构造函数 2, 静态代码块 和 静态成员变量 只会初始化一次 有父类的情况 1,父类 ...

  2. C++静态成员函数不能调用非静态成员变量

    其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们 都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份.然而非静态成员变量和非 ...

  3. static 关键字 静态成员变量及静态成员函数

    static类成员 类成员类似于C语言的全局变量,但是与全局变量又有所不同,例如,全局变量是可以被任何的用户代码所修改,而且全局变量破坏了对象的封装性. 使用类的 static 成员的优点 使用 st ...

  4. C++解析(14):静态成员变量与静态成员函数

    0.目录 1.静态成员变量 2.静态成员函数 3.小结 1.静态成员变量 成员变量的回顾: 通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象之间共享 新的需求: ...

  5. 成员函数内定义static变量(不安全,各对象之间共享)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u012317833/article/de ...

  6. c++ 静态成员变量

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  7. Android-Java-静态成员变量&成员变量&局部变量(内存图&回收机制)

    静态成员变量(回收机制) StaticDemo 和 MyDemo package android.java.oop13; class MyDemo { /** * 定义一个静态变量 */ public ...

  8. C++ 静态成员变量、成员函数

    1.每个变量,都有自己的属性. 2.用 static 定义的成员变量.成员函数 ,是属于所有变量的. 3.关键字 static 可以用于说明一个类的成员. 4.把一个类的成员说明为 static 时, ...

  9. java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

    /* 样例1: class Parent{ int num = 3; } class Child extends Parent{ int num = 4; } */ /* 样例2: class Par ...

随机推荐

  1. [js高手之路]Node.js实现简易的爬虫-抓取博客所有文章列表信息

    抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取博客所有的文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的h ...

  2. js处理包含中文的字符串

    场景: js中String类型自带的属性length获取的是字符串的字符数目,但是前端经常会需要限制字符串的显示长度,一个中文字符又大概占两个英文小写字符的显示位置,所以中英文混合的情况下用lengt ...

  3. react组件直接在document上添加事件

    demo:比如组件里有个div写的框框,点击document body的背景色变红,点击div写的框框没效果 componentDidMount(){ document.onclick = this. ...

  4. linux 根据进程名杀死进程 -kill进程名

    前两天一个老师给我出了一个linux操作上的问题,现在知道进程名怎样杀死这个进程.或许很多人都会和我一样说用 #pkill 进程名 或是 #killall 进程名 的确这个两个命令都能做到这些,而且我 ...

  5. demo.testfire.net 靶场测试流程记录

    demo.testfire.net span::selection, .CodeMirror-line > span > span::selection { background: #d7 ...

  6. linux 用户管理修改用户信息、密码状态、删除用户、退出登陆、切换用户

    修改用户信息usermoduseradd支持的选项usermod都支持passwd有两个选项-l(在密码串前面加了两个叹号),-u,usermod有两个选项:-L 临时锁定用户(Lock)(在密码串前 ...

  7. 一种特殊场景下的HASH JOIN的优化为NEST LOOP.

    应用场景: 有如下的SQL: select t.*, t1.ownerfrom t, t1where t.id=t1.id; 表t ,t1的数据量比较大,比如200W行.但是两张表能关联的行数却很少, ...

  8. ShowDoc

    ShowDoc 摘自ShowDoc 每当接手一个他人开发好的模块或者项目,看着那些没有写注释的代码,我们都无比抓狂.文档呢?!文档呢?!Show me the doc !! 程序员都很希望别人能写技术 ...

  9. Oracle EBS 多节点停应用

    adstpall.sh   -mode=allnodes app/apps

  10. JAVA使用POI如何导出百万级别数据

    用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会常报OOM错误,这时候调整JVM的配置参数也不是一个好对策(注:jdk在32位系统中支持的内存不能超过2个G,而在6 ...