【C++】 3.7 静态成员

3.7 静态成员

【内容】静态成员分为静态数据成员静态函数成员

【作用】为了实现一个类的多个对象之间的数据共享

1、静态数据成员

【类内声明格式】

static 数据类型 数据成员名

【类外定义格式】

数据类型名 类名::静态数据成员名=初始值;

【访问格式】

类名::静态数据成员名;   
对象名.静态数据成员名;
对象指针->静态数据成员名;

【说明】

(1)静态数据成员是类的公共数据成员,是对象的共享数据

(2)私有静态数据成员不能在类外直接访问,必须通过公有的成员函数访问

(3)C++支持私有静态数据成员可以不必使用全局变量,其违反封装特性

2、静态成员函数

【定义格式】

static 返回类型 静态成员函数名(参数名);

【调用格式】

类名::静态成员函数(实参表);   
对象名.静态成员函数(实参表);
对象指针->静态成员函数(实参表);

【说明】

(1)静态函数用来访问静态数据成员,当它与静态数据成员一起使用时,达到了对同一类中对象之间共享数据的目的

(2)私有静态成员函数不能做类外部的函数和对象访问

(3)在建立任何对象之前调用静态成员函数,以处理静态数据成员

(4)静态成员函数访问非静态数据成员,通过对象名、对象指针、对象引用访问该对象的非静态成员

3、示例

#include<iostream>
#include<string.h>
using namespace std;

class Students{
	public:
		Students(char* stu_name,char* stu_num,float stu_score);
		~Students();
		void show();
		static void showcount();		//声明静态成员函数,用其访问静态数据成员 
		static void resetcount();		//声明静态成员函数,用其处理静态数据成员 
		static void showinfo(Students& stu); //声明静态成员函数,用其访问非静态数据成员 
	private:
		char* name;
		char* num;
		float score;
		static int count; 		//声明静态数据成员 
}; 

Students::Students(char* stu_name,char* stu_num,float stu_score){
	name=new char[strlen(stu_name)+1];
	strcpy(name,stu_name);
	
	num=new char[strlen(stu_num)+1];
	strcpy(num,stu_num);
	
	score=stu_score;
	++count;
}

Students::~Students(){
	delete []name;
	delete []num;
	--count;
}

void Students::show(){
	cout<<"\n姓名:"<<name;
	cout<<"\n学号:"<<num;
	cout<<"\n分数:"<<score<<endl; 
} 

void Students::showcount(){			//静态成员函数访问静态数据成员 
	cout<<"\n人数:"<<count; 
}

void Students::resetcount(){		//静态成员函数处理静态数据成员 
	count=0;
	cout<<"\n人数格式化:"<<count;
}

void Students::showinfo(Students &stu){		//静态成员函数访问非静态数据成员 
	
	cout<<endl<<stu.name<<"同学的学号:"<<stu.num;
	cout<<endl<<stu.name<<"同学的的分数:"<<stu.score<<endl; 	
}

int Students::count=0;			//定义静态数据成员 

int main()
{
	Students stu1("Jeety","20190101",100);
	stu1.show();	
	Students stu2("Joly","20190102",90);
	stu2.show();
	
	Students stu3("Jody","20190103",80);
	stu3.show(); 
		
	Students::showcount();		//访问静态数据成员 
	Students::resetcount();		//处理静态数据成员 
	Students::showinfo(stu3);	//访问非静态数据成员 
	return 0;
	
}

【运行结果】

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值