c++类的静态成员(多文件举例)

学习目标:

掌握c++中类的静态成员用法

学习内容:

1、 类的静态数据成员
2、 类的静态成员函数
3、 多文件实例


作为一名大学c++初学者,本人在最近一次实验课中学到了关于类的静态成员内容,在一脸懵逼中度过了漫长的实验课。。。
回到宿舍后我痛定思痛,决定攻克这个可恶的知识点,参考了众多视频与书面资料后,感觉学有所成,今天便来同各位大佬展示自己的拙见。

类的静态数据成员

大家可以想一下,如果我们有一个公司类,这时需要统计公司的成员个数,这个个数应该存储在什么地方呢?

如果用类外的数据存储,就不能实现数据的隐藏,而且不符合面向对象编程的思想:如果在类中增加一个数据成员来存放总数,会在创立的每一个对象中创建一个副本,造成冗余,而且每个对象分别维护一个总数,容易造成数据的不一致性。

所以我们可以创建一个所有对象共享的一个数据,这便是静态数据成员。

静态数据成员一般的用法: 类名::标识符
需要注意:其初始化不能通过构造函数,只能在类外进行。

文章最后会给一个综合实例来演示其用法

类的静态函数成员

大家试想,现在需要一个函数来输出公司的人数,最开始假设公司人数初始化为0,此时公司类并没有对象,这时怎样输出这个人数初始值呢??

由于没有对象,无法通过对象.函数()来调用,这时静态成员函数就可以发挥它的作用了。
需要注意: 静态成员函数一般是用来配合静态数据的,没有静态数据也就没必要声明静态函数。

下面是一个多文件的实例;

题目(这是我这次实验课遇上的题目):

实现客户机(CLIENT)类。定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中定义类,在文件client.cpp中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。

以下是代码:

//client.h
#pragma once
#ifndef CLIENT_H
#define CLIENT_H
class CLIENT
{
public:
	CLIENT();
	~CLIENT();
	static void ChangeServerName(char name);//改变服务器名称
	static void ShowNum();//输出客户个数
	static void ShowServerName();//输出服务器名

private:
	static int ClientNum; //客户数量
	static  char ServerName; //服务器名
};
#endif
//client.cpp

#include"client.h"
#include<iostream>
using namespace std;

int CLIENT::ClientNum = 0; //静态数据成员初始化,类外定义
char CLIENT::ServerName = 'A';//静态数据成员初始化,类外定义
CLIENT::CLIENT() { ClientNum++; }
CLIENT::~CLIENT() { ClientNum--; }
//静态成员函数
void CLIENT::ChangeServerName(char name)
{
	//这里需要注意 this->ServerName = name是不行的,原因可能是
	//静态成员函数不需要this指针
	ServerName = name;
}
void CLIENT::ShowNum()
{
	cout << "客户的数量为:" << ClientNum << endl;
}
void CLIENT::ShowServerName()
{
	cout << "服务器名为:" << ServerName << endl;
}


//text.cpp

#include<iostream>
#include"client.h"
using namespace std;
int main()
{
	CLIENT::ShowNum();//未创建对象,先试试能不能输出客户个数
	CLIENT::ShowServerName();//同上
	CLIENT A;//创建对象
	A.ChangeServerName('A');//修改服务器名
	//输出
	A.ShowNum();
	A.ShowServerName();
 //以下同理
	CLIENT B;
	B.ChangeServerName('B');
	B.ShowNum();
	B.ShowServerName();
	return 0;
}

程序运行截图

在这里插入图片描述
以上就是我个人的理解了,如有错误,恳请各位大神指正!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值