C++入门静态成员详解(定义实现原理使用注意事项)

Posted 正在起飞的蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++入门静态成员详解(定义实现原理使用注意事项)相关的知识,希望对你有一定的参考价值。

1、类的静态成员

(1)在类中用static修饰成员,则该成员是静态成员;
(2)静态成员是属于类本身的,所有类的对象共享;
(3)类的对象都可以访问静态成员,但是所有类的成员访问的静态成员都是同一份静态成员;
(4)静态成员在类内部声明时加static声明,在类外定义静态成员时无需添加static修饰;

2、静态成员的使用场景

(1)因为静态成员是属于类而不是属于单个对象的,所以静态成员用来记录类相关的信息;
(2)比如:用静态成员来统计创建了多少个类的对象;

3、、静态成员使用

3.1、示例代码

#include <iostream>

using namespace std;

class Person

private:

public:
	int age;			// 普通成员变量
	static int cnt;		//统计程序存在的中类的对象个数
	
	Person(void);	//构造函数
	~Person(void);	//析构函数
;

//在构造函数中cnt加一
Person::Person(void)

	age = 18;
	Person::cnt++;	//方式1
	//cnt++;		//方式2
	//this->cnt++;	//方式3


//在析构函数中cnt减一
Person::~Person(void)

	Person::cnt--;


// 对Person类中的静态成员定义		
int Person::cnt;	

int main(void)

	cout << "Person::cnt = " << Person::cnt << endl;
	
	Person *p1 = new Person();

	cout << "Person::cnt = " << Person::cnt << endl;
	Person *p2 = new Person();

	cout << "Person::cnt = " << Person::cnt << endl;
	Person *p3 = new Person();

	cout << "Person::cnt = " << Person::cnt << endl;
	
	delete(p1);
	cout << "Person::cnt = " << Person::cnt << endl;

	delete(p2);
	cout << "Person::cnt = " << Person::cnt << endl;

	delete(p3);
	cout << "Person::cnt = " << Person::cnt << endl;
	
	return 0;

(1)静态变量和普通变量的区别:静态变量在类中只是用static来声明,需要在类外进行定义;
(2)创建Person类的对象时会调用构造函数,构造函数会对cnt加一;
(3)销毁Person类对象时会调用析构函数,析构函数会对cnt减一;
上面代码的效果:用类的cnt静态变量来统计程序中还存放多少个Person类的对象;

3.2、代码结果分析

Person::cnt = 0
Person::cnt = 1
Person::cnt = 2
Person::cnt = 3
Person::cnt = 2
Person::cnt = 1
Person::cnt = 0

(1)每次创建Person类的对象都会调用对象自己的构造函数,从上面的程序执行结果可以得出结果,每个对象的构造函数操作的cnt都是同一份cnt;
(2)析构函数也是如此;
总结:对象操作的类静态成员都是同一份;

4、静态成员的使用注意事项

(1)静态成员变量/函数,需要在类外面进行定义;
(2)普通成员函数可以调用静态成员变量和函数;
(3)静态函数只能访问静态函数和静态变量,不能访问任何非静态的东西;
(4)在对象的构造函数中不能对静态变量进行初始化,因为静态变量不属于单个对象,不需要对象去初始化;

5、静态成员的本质

(1)从上面的例子可以看出,静态变量在类中用static声明,但是要在类外进行定义;普通的成员变量都是创建对象时自动创建的;
(2)静态成员的本质就是全局变量和全局函数,在类中用static声明,相当于把类和这个全局变量/函数进行绑定;
(3)因为静态成员是全局变量/函数,生命周期是整个程序的生命周期,所以我们不需要创建对象就可以使用静态成员;

推荐

我会在C++专栏持续根据更新C++相关的知识点,这里也给大家推荐一款学习C++的神器,我也是在用这一款神器在学习C++。
链接:学习神器跳转
如果你是想入门C++这门语言或者是找C++岗位的工作,都推荐你试试这个网站,里面有针对C++知识点的选择题、编程题,更有C++岗位的面试题,还可以在里面交流行业信息

以上是关于C++入门静态成员详解(定义实现原理使用注意事项)的主要内容,如果未能解决你的问题,请参考以下文章

C++入门篇之类和对象总结下

C++ 继承 详解

C++继承详解

C++继承详解

C++入门使用using重新定义继承的成员访问权限

C++静态多态与动态多态的实现原理剖析