C++ static关键字

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在中的作用。

一、面向过程程序设计

1、普通变量

        (1)在内存分配上,static修饰的变量内存分配在全局数据区

        (2)与局部变量相比,未经初始化的static修饰的变量会被程序自动初始化为0(局部变量的值是随机的,除非它被显式初始化)

        (3)在作用域上,static修饰的局部变量作用域与普通局部变量的作用域相同,而static修饰的全局变量作用域与普通全局变量作用域不同,前者在文件之外是不可见的,而后者在文件之外可见。

接下来做一个实验验证第3点作用域不同,如果已会可忽略。

实验:自定义test.cpp和main.cpp

 当把main.cpp中的int a前加上修饰static,编译器会报错undefined reference to `a',证明了static修饰的变量在文件之外是不可见的。而把main.cpp中的int a前不加任何修饰时,编译正确通过,可见普通全局变量在文件之外可见。

//test.cpp
#include <iostream>
using namespace std;

extern int a;
void test(){
	printf("Welcome to test.cpp\nThe value of a is %d\n", a);
}

// main.cpp
#include <iostream>
using namespace std;
void test();
int a;
int main(){
	a = 10;
	test();
	return 0;
}

2、函数

        在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用。 

二、面向对象程序设计

1、静态数据成员

        (1)在内存分配与初始化上,static修饰的变量内存分配在全局数据区。 静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:<数据类型><类名>::<静态数据成员名>=<值>

        (2)在对象使用上,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。

2、静态成员函数

        (1)静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数,但不能访问非静态成员函数和非静态数据成员;

        (2)非静态成员函数可以任意地访问静态成员函数和静态数据成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值