C++中的static

C++中的static

	1.修饰全局变量--只能本文件使用      static int aa = 0;
	2.修饰局部变量--延长生命周期		
	3.修饰函数	  ---该函数只能在本文件使用


static 修饰类成员变量
需求: 1.一个类想知道自己一共产生了多少个对象
2.同类 对象之间想共享一些东西
将一个类成员变量修饰为 static即可

			class student {
			public:
				static int objcnt;  它只有一份,所有对象共享它
								它不依赖于对象而存在
				string name,sex;
				int age;
			
				student(){ objcnt++;}
				
				int getCnt(){return objcnt;}

			};
			
		那么什么时候分配他的空间:   和对象无关
			定义类的时候就有了吗????   类是不占空间的.
			
			它是 第一次定义和初始化的时候 分配空间;
				so,类静态成员 必须在某个地方 定义并初始化.
	
			如何访问静态成员呢
				1.所有对象共享它,可以使用 对象.objcnt
				2.   类名::静态成员  方式;  
				3.类函数可以直接访问
	
	####static修饰类成员函数
	
		class student {
			public:
				static int objcnt;  它只有一份,所有对象共享它,它不依赖于对象而存在
				string name,sex;
			
				student(){ objcnt++;}
				void show() { ...}
				static int getCnt(){return objcnt;}

		};
	
		以前,你想使用类提供的函数,必须先 定义对象.  不方便...
			可否不用定义对象,也能使用 类函数.可以的  
			static修饰的成员函数,  不依赖于对象而存在,一直都在, 所有的对象共享它.
			注意: static成员函数只能访问 static变量.
#include<iostream>
using namespace std;

class student {
public:
	static int objcnt; // 静态成员变量,   它只有一份,所有对象共享它
						//它不依赖于对象而存在
 	string name,sex;
	int age;

	student(){ objcnt++;}
	student(string name,int age){this->name=name;this->age=age; objcnt++;};
	
	//static void show() {cout<<"name="<<name<<"sex="<<sex<<" staticcnt="<<objcnt<<endl;}
	//静态成员函数,只能访问静态成员变量 ----因为对象可能不存在
	
	static int getCnt(){           return objcnt;}   //静态成员函数:    类成员可以直接访问
};										 			 //静态函数,不依赖于对象而存在,所有对象共享它



int student::objcnt = 0;		//定义并初始化---这个时候才分配了空间

int main()
{
	student xiaohuang("huang",4);
	xiaohuang.show();
	
	
	cout<<"static fun = "<<  student::getCnt() <<endl;   //静态函数访问方法1: 不依赖于对象而是用
	
	student xiaohuang ;
	student xiaoqiang("xiaoqiang",3);
	
	/*如何访问静态成员呢
		1.所有对象共享它,可以使用 对象.objcnt
		2.   类名::静态成员  方式;  
		3.类函数可以直接访问
	*/
	
	cout<<"obj cnt:"<<xiaoqiang.objcnt<<endl;  
	cout<<"obj cnt:"<<xiaoqiang.getCnt()<<endl;		静态函数访问方法2: 对象共享它,则对象也可以访问
	
	cout<<"objcnt="<<student::objcnt<<endl;  //不依赖对象
	
}
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++,`static`是一个关键字,可以用于修饰变量、函数和类。它具有不同的含义,取决于它所修饰的内容。 1. 静态变量(Static Variables):在函数内部使用`static`修饰的变量称为静态变量。静态变量在程序的生命周期只被初始化一次,并且在函数调用之间保持其值。静态变量存储在静态存储区,而不是堆栈。可以通过函数名和作用域解析运算符来访问静态变量。 ```cpp void foo() { static int counter = 0; // 静态变量 counter++; cout << "Counter: " << counter << endl; } int main() { foo(); // 输出: Counter: 1 foo(); // 输出: Counter: 2 return 0; } ``` 2. 静态函数(Static Functions):在类使用`static`修饰的成员函数称为静态函数。静态函数不依赖于任何特定的对象,可以直接通过类名进行调用。它们不能访问非静态成员变量,只能访问其他静态成员(包括静态变量和静态函数)。 ```cpp class MyClass { public: static void staticFunc() { cout << "This is a static function" << endl; } }; int main() { MyClass::staticFunc(); // 输出: This is a static function return 0; } ``` 3. 静态数据成员(Static Data Members):在类使用`static`修饰的成员变量称为静态数据成员。静态数据成员属于类本身,而不是类的实例。它们在程序的生命周期只有一个副本,并且可以被类的所有对象共享。静态数据成员必须在类外部进行定义和初始化。 ```cpp class MyClass { public: static int staticVar; }; int MyClass::staticVar = 10; // 定义和初始化静态数据成员 int main() { cout << MyClass::staticVar << endl; // 输出: 10 return 0; } ``` 使用`static`关键字可以有效地控制变量、函数和类的作用范围和生命周期,并且具有一些特殊的用途,例如实现单例模式或在类共享数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小镇春风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值