静态成员变量成员函数

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

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. cakephp中使用大括号的形式避免用点号连接sql语句

    在cakephp中可以使用{}的形式来代替点号连接sql语句,减少出错的几率

  2. LOJ#6491. zrq 学反演(莫比乌斯反演 杜教筛)

    题意 题目链接 Sol 反演套路题? 不过最后一步还是挺妙的. 套路枚举\(d\),化简可以得到 \[\sum_{T = 1}^m (\frac{M}{T})^n \sum_{d \ | T} d \ ...

  3. 宝塔面板nginx配置安装Discuz

    Discuz!在Nginx下的Rewrite 需要说明的是,下网上以前一直流传的Rewrite都是有误的. 下面的Rewrite中百分号前面多了个转移字符"",这在Apache中是 ...

  4. CentOS7系列--2.2CentOS7中配置SSH服务

    CentOS7配置SSH服务 1. SSH配置 1.1. 使用SSH服务更加安全 [root@centos7 ~]# vi /etc/ssh/sshd_config 设置如下 PermitRootLo ...

  5. GIS在水利中的应用

    摘要  GIS具有数据存储.查询.统计.图形显示.分析.模拟.决策和预测等功能,在水利中得到越来越广泛的应用,可谓水利现代化的“火车头”. 关键词 GIS 水利 应用 地理信息系统GIS通常泛指用于获 ...

  6. Difference between ReLU、LReLU、PReLU、CReLU、ELU、SELU

    激活函数 ReLU.LReLU.PReLU.CReLU.ELU.SELU  的定义和区别 ReLU tensorflow中:tf.nn.relu(features, name=None) LReLU ...

  7. Dlink DIR-823G 漏洞挖掘过程

    前言 本文由 本人 首发于 先知安全技术社区: https://xz.aliyun.com/u/5274 初步分析 首先下载固件 https://gitee.com/hac425/blog_data/ ...

  8. 解决PJA错误

     现场有WAS5.6,均安装在AIX下,且都已经设置PJA,在WAS5上报表正常,但是在WAS6下报表会报错,两个应用下的配置均相同. 反馈的报错日志: [11-4-25 14:20:42:758 ...

  9. oracle profile 概要文件

    Profile文件概述: Profile是Oracle安全策略的一个组成部分,当Oracle建立数据库时,会自动建立名称为Default的Profile文件. 创建用户的时候,如果没有指定profil ...

  10. pycharm 调试Django 奇葩问题:Process finished with exit code -1073741819

    想自己整个BLOG,发现python+Django好像还不错,尝试一下.在使用过程中,突然pycharm不能调试django工程.网上搜索也没解决,是google哦.好像记得启动pycharm时,看到 ...