五句话概括:静态成员变量和静态成员函数都属于类的,不属于具体某个对象。

静态成员变量定义时,可以在类外定义,不受访问权限限制,但是在访问时,却要遵循访问权限限制。

静态成员函数只能访问静态成员变量。普通函数既可以访问静态成员变量,也可以访问普通成员变量。

静态成员变量存在的意义是实现数据的共享。

在静态成员函数内部可以声明静态变量,注意不是静态成员变量。如果在静态成员函数内部声明一个静态变量,则该类的所有对象将共享这个变量。

静态成员变量

静态成员变量属于类而不属于任何一个对象,如此一来可以实现数据共享功能。静态成员变量不会影响类及其对象的大小,也即sizeof结果不会受到影响。

静态成员变量如果被设置为private或protected属性,则在类外同样无法访问,但定义该变量的时候却不受此限制,如例2所示,虽然静态成员变量count为private属性,但是它在类外定义的时候不受private限制。

class student
{
public:student(){count ++;}~student(){count --;}
private:static int count;//其它成员变量
};
int student::count = 0;//静态成员变量可以在外部用类名加上域解析符“::”加上变量名的形式定义

静态成员函数

静态成员函数只能访问静态成员变量,而不能访问非静态成员变量。普通成员函数(包括构造函数和析构函数)既可以访问普通成员变量,同时又可以访问静态成员变量。

#include<iostream>
using namespace std;class test
{
public:test(int a, int b){num = a; plus = b;}static int getnum(){return num;}static int add(){return num+plus;}  //compile errorvoid setnum(int a){num = a;}void setplus(int a){plus = a;}
private:static int num;int plus;
};
int test::num = 1;int main()
{test one;one.setnum(5);cout<<test::getnum()<<endl;return 0;
}

访问静态成员变量和静态成员函数均有两种方式,其一是和普通的成员变量成员函数相同,通过对象来访问,其二则是可以通过类名加上域解析操作符访问。当然访问过程中仍然要遵循private、protected和public关键字的访问权限限定。访问静态成员变量和静态成员函数首选的方法是通过类来访问,毕竟静态成员变量和静态成员函数都是属于类的,与类相关联,而不是属于类的对象。普通成员变量或成员函数不可以通过类来访问。由于静态成员变量和静态成员函数都是属于类,而不是属于对象,因此静态成员函数内部也不存在this指针,因为静态成员函数不属于对象。

在静态成员函数内部可以声明静态变量,注意不是静态成员变量。如果在静态成员函数内部声明一个静态变量,则该类的所有对象将共享这个变量。

#include<iostream>
using namespace std;class test
{
public:static void add(int a);
};void test::add(int a)
{static int num = 0;int count = 0;num += a;count += a;cout<<num<<" "<<count<<endl;
}int main()
{test one,two,three;one.add(5);two.add(4);three.add(11);return 0;
}

程序运行结果:
5 5
9 4
20 11

C++类与static关键字相关推荐

  1. static string java_java:String类、static关键字、Arrays类、 Math类

    public voidStrMethodTest(){/** public int length () :返回此字符串的长度. * public String concat (String str) ...

  2. java关键字static_Java中的static关键字

    java关键字static static keyword in Java is used a lot in java programming. Java static keyword is used ...

  3. java static关键字的作用是什么_static关键字有什么作用

    今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...

  4. java中static关键字的作用_面试|static 关键字有什么作用

    今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...

  5. static 关键字用法总结

    一.static 关键字的含义 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法.(注意:不能修饰普通 ...

  6. 面试|static 关键字有什么作用

    今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...

  7. Java的知识点10——static关键字、静态初始化块、 参数传值机制、包、导入类import、 静态导入

    static 关键字 在类中,用static声明的成员变量为静态成员变量,也称为类变量. 类变量的生命周期和类相同,在整个应用程序执行期间都有效.它有如下特点: 1. 为该类的公用变量,属于类,被该类 ...

  8. Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package

                     oop三大特性:封装,继承,多态 oop一般指面向对象程序设计(一种计算机编程架构) 一.封装的概念:    将东西包在一起,然后以新的完整形式呈现出来       ...

  9. JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

    运行第一个JAVA程序: 这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样 ...

最新文章

  1. ERP项目中一个表应该有哪些默认字段
  2. Ardino基础教程 5_按键控制
  3. 转如何限制文本框只能输入数字,小数点,英文,汉字等各类代码
  4. Spring5的数据访问与集成
  5. 推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架
  6. 基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)
  7. python交叉验证函数_python – 在sklearn中使用交叉验证和AUC-ROC作为逻辑回归模型...
  8. Linq 左连接 left join
  9. Ubuntu 16.04 火狐添加java插件、解决Firefox强制低版本java插件运行以及安全设置限制自签名应用程序运行
  10. 专线维护 07/11
  11. ZOJ 3229 有上下界最大流
  12. Uboot系统初始化为何要初始化堆栈?为何C语言的函数调用要用到堆栈,而汇编却不需要初始化堆栈?
  13. c语言默认参数_GCC 11 将默认前端语言改成 C++ 17
  14. java sybase数据库连接_在JAVA中连接Sybase数据库(例子)
  15. python金融反欺诈-项目实战
  16. 750ti显卡能支持服务器吗,《守望先锋》显卡实测:750Ti降服全特效
  17. 118、交换机配置规范
  18. Zookeeper-Paxos-屁民的故事-内含视频讲解
  19. HTML个人简历代码模板(静态页面)
  20. ARM SCP-firmware 代码解析

热门文章

  1. C++ Map Source
  2. 混淆工具Dotfuscator基本使用
  3. VC++初步实现保存数据为音频WAV文件
  4. Kubernetes的yaml文件中command的使用
  5. java 图片上传
  6. Windows XP Embedded 上手指南
  7. springBoot单元测试-模拟MVC测试
  8. CentOS-6.4 minimal - 安装VMware Tools(linux)
  9. Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务
  10. Docker: 解决Centos 7中Permission Denied的问题