C++中static

Posted on 2018-07-26 11:06  yacbo  阅读(157)  评论(0编辑  收藏  举报

1.静态全局变量

#include<stdio.h> 
static int Temp = 10;
void Test();
int main()
{
	printf("Temp is %d\n", Temp);//输出:10
	Test();//输出:10
	printf("Temp is %d\n", Temp);//输出:11
	return 0;
}
void Test()
{
	Temp++;
}

  特点:作用域在声明此变量的文件中,其他文件即使使用extern关键字修饰其声明也不可使用

2.静态局部变量

#include <stdio.h>
void Test();
int main()
{
	for(int i=0; i<5; i++)
	{
		Test();
	}
	return 0;
}
void Test()
{
	static Temp = 10;
	printf("Temp is %d\n", Temp);
	Temp++;
}

  特点:内存存放在 程序的全局数据区中;只会被初始化一次,其后运行到该对象的声明是不会再初始化;不能被其作用域之外的其他模块调用,其调用范围仅限于声明该变量的函数作用域当中。

3.静态数据成员

#include <stdio.h>
class TempClass
{
public:
	TempClass(int a, int b, int c);
	void Show();
private:
	int a,b,c;
	static int T;
}
int TempClass::T = 0;//初始化静态数据成员
TempClass::TempClass(int a, int b, int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
	T = a + b + c;
}
void TempClass::Show()
{
	printf("T is %d\n", T);
}
int main()
{
	TempClass ClassA(1,1,1);
	ClassA.Show();//输出1+1+1 = 3;
	TempClass ClassB(3,3,3);
	ClassB.Show();//输出3+3+3 = 9;
	ClassA.Show();//输出9
	return 0;
}

  特点:静态数据成员的服务对象是所有类实例化的对象;静态数据成员在对象产生之前就已被分配内存,内存存储 在全局数据区,随进程的消亡而消亡。

4.静态成员函数

#include <stdio.h>
 
 
class TempClass
{
public:
	TempClass(int a, int b, int c);
	static void Show();
private:
	int a,b,c;
	static int T;
}
int TempClass::T = 0;	//初始化静态数据成员
TempClass::TempClass(int a, int b, int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
	T = a + b + c;
}
void TempClass::Show()
{
	printf("T is %d\n", T);
}
int main()
{
	TempClass ClassA(1,1,1);
	ClassA.Show();
	TempClass ClassB(3,3,3);
	ClassB.Show();
	
	TempClass::Show();	//注意此处的调用方式.
	return 0;
}

  特点:静态成员函数比普通成员函数多了一种调用方式;静态成员函数为整个类服务,而不是具体的一个类的实例服务;静态成员函数不可以操作类中的非静态成员。

Copyright © 2024 yacbo
Powered by .NET 8.0 on Kubernetes