C++静态数据成员和静态成员函数详解

举报
努力变强的小C 发表于 2022/09/29 22:01:16 2022/09/29
【摘要】 C++静态数据成员和静态成员函数详解

目录


静态数据成员

结论

 注意事项

静态成员函数

静态成员函数的调用



静态数据成员

在C++中,我们可以使用static关键字定义类成员,成员定义为静态的,只要我们将类成员进行成功创建时,那就意味着无论我们创建多少个对象,那么近代成员就始终只有一个副本
首先我们提出一个问题,在对学生成绩统计的案例中,我们如何计算出一共创建了多少个学生对象?接下来我们就用例子演示一遍

#include <iostream>
using namespace std;
class A {
public:
	A() {
		++count;
	}
	void obj_num() {
		cout << "已经创建了的对象个数:" << count <<endl;
	}
private:
	static int count;
};
int A::count = 0;
int main() {
	A obj[3] = {
		A(),
		A(),
		A()
	};
	obj[2].obj_num();
	obj[3].obj_num();
	A c;
	c.obj_num();
	return 0;
}

输出结果:

已经创建了的对象个数:3
已经创建了的对象个数:3
已经创建了的对象个数:4

结论

我们可以得知对象是类的一个实例,并且创建的每一个对象都具有属于自己的数据成员,但是总有一部分数据,我们想让他们达到多个对象数据共享的目的,但是如果将一个变量定义为全局变量,就会带来严重的不安全性,这与我们类的封装性是有违的,这会严重破坏面向对象程序设计中的信息隐秘的方面,所以我们为了实现同一个类之间多个对象的数据共享,在C++中就提出了静态数据成员的概念,在一个类中,若将一个数据成员定义为static类型,那我这种成员,我们就把他称之为近战成员与一般的成员是不同的,这个进展成员是无论建立多少个类的对象,就始终只有一个静态数据成员的拷贝,就通俗的来说,就是始终只有一个副本,用以上方法就可以很好的解决数据不安全的问题,还可以实现同一个类中不同对象之间数据的共享性

 注意事项

静态成员变量必须初始化,并且只能在类的外面进行初始化,在我们初识化的时候可以赋初值,也可以不要,如果我们没给他,赋初值的话,那么就会默认初始化为0,

静态成员函数

  在我们类的定义中,前面有static的成年函数,我们称之为静态成员函数,尽量乘以函数是属于所有类对象共享的成员函数,他不是单单只属于类中的某一个对象,近代成员函数的作用不是为了对象之间的沟通,而是为了处理类中的静态数据成员,静态成员函数的定义格式有以下几种

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

静态成员函数的调用

与静态成员函数相似,调用公有的成员函数的一般格式有以下几种 

1、类名::静态成员函数名(实参表)

2、对象.静态成员函数(实参表)

3、对象指针 -> 静态成员函数(实参表)

一般来说静态程序函数是不会访问类中的非静态成员,如果有需要,近代成员函数就只能通过对象名来访问该对象的非静态成员

静态成员函数和非静态成员函数的主要区别就是非静态成员函数有this指针,而静态成员函数就没有  这就导致了静态成员函数可以直接访问本类中的所有静态数据成员,因为静态数据成员同样也是类的一部分,就可以直接访问,静态成员函数不访问类中的非静态成员

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。