C++中静态成员变量和静态成员函数

类成员中用 static 声明的为 静态成员,又分为 静态成员变量静态成员函数

class Person{
public: 
	//类的静态成员变量(属性)   
	static int Num;  
	
	//静态成员函数  
	static void changeParam(int param){
	
	}
}

静态成员变量
  • 静态成员变量,属于某个类,所有对象共享。
  • 无论建立了多少个对象,都只有一个静态数据(静态变量、静态函数)的拷贝。
  • 编译阶段就分配空间。即:对象还没有创建时,就已经分配空间。
#include<iostream>
using namespace std;

class Person {
public:
	//类的静态成员属性    在类内声明,类外进行初始化,如果写成 static int Num = 10  就会报错
	static int Num;

private:
	static int Other;
};

//类外初始化,初始化时不加static
int Person::Num = 0;
//在类外,private修饰的属性原则上不可以类外访问的,但是这是给静态变量初始化,它会认为你还是在类内操作的
int Person::Other = 0;

int main() {
	//1. 通过  类名 直接访问
	Person::Num = 100;
	cout << "Person::Num:" << Person::Num << endl; //输出:Person::Num:100

	//2. 通过  对象  访问
	Person p1, p2;
	p1.Num = 200;

	cout << "p1.Num:" << p1.Num << endl;  //输出:p1.Num:200
	cout << "p2.Num:" << p2.Num << endl;  //输出:p2.Num:200

	//3. 静态成员也有访问权限,类外不能访问私有成员
	cout << "Person::Other:" << Person::Num << endl;   //输出:Person::Other:200
	//cout << "Person::Other:" << Person::Other << endl;   //报错!!!
	Person p3;
	//cout << "p3.Other:" << p3.Other << endl;  //报错!!!
}

静态成员函数
  • 静态成员函数只能访问静态变量,不能访问普通成员变量
  • 普通成员函数可访问静态成员变量、也可以访问非经常成员变量
  • 无论建立了多少个对象,都只有一个静态数据(静态变量、静态函数)的拷贝。
#include<iostream>
using namespace std;

class Person {
public:
	//普通成员函数   可以访问   static和non-static成员  属性
	void changeParam1(int param) {
		Param = param;
		Num = param;
	}
	//静态成员函数  只能访问   static成员  属性
	static void changeParam2(int param) {
		//Param = param; //无法访问
		Num = param;
	}
private:
	static void changeParam(int param) {
		//mParam = param; //无法访问
		Num = param;
	}
public:
	int Param;
	static int Num;
};

//静态成员属性类外初始化
int Person::Num = 0;

int main() {

	//1. 类名直接调用
	Person::changeParam2(100);

	//2. 通过对象调用
	Person p;
	p.changeParam2(200);

	//3. 静态成员函数也有访问权限
	//Person::changeParam(100); //类外无法访问私有静态成员函数
	//Person p1;
	//p1.changeParam(200);
}

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值