学习:类和对象——静态成员变量和函数

静态成员:

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

静态成员分为: 静态成员变量和静态成员函数,其中这两个特点如下

静态成员变量:

特点1、所有对象共享同一份数据
特点2、在编译阶段分配内存
特点3、类内声明,类外初始化

静态成员函数:

特点1、所有对象共享同一个函数
特点2、静态成员函数只能访问静态成员变量


静态成员变量:
示例代码:

#include<iostream>
#include<string>

using namespace std;

class Person {

public:
	Person() {
		cout << this->b << endl;
	}
	
public:
	static int a; //定义一个共享静态成员变量
private:
	static int b; //定义一个私有静态成员变量
};

int Person::a = 1;
int Person::b = 2;


void test01() {
	Person p1;
	cout << p1.a << endl; // 生成p1的对象 直接访问不可以,因为没有在外部对静态成员进行初始化
	//cout << p1.b << endl; //无法进行访问,因为静态变量b是私有的

	//由于静态成员变量是存在于全局区的,所以我们可以直接通过类名进行访问
	cout << Person::a << endl;
	//cout << Person::b << endl;

}

int main() {
	test01();
	
	system("pause");
	return 0;
}

静态成员函数:

静态成员函数特点:
特点1、程序共享一个函数
特点2、静态成员函数只能访问静态成员变量

示例代码

#include<iostream>
#include<string>

using namespace std;


class Person {
public:
	Person(int a) {
		this->a = 10;
	}

	static void to_visit() { // 静态函数可以访问静态变量,但是无法访问类中的变量,原因也很好理解,无法区别到底是哪个对象的a成员变量
		cout << "这是公共静态成员函数" << endl;
		cout << a << endl;
	}

public:
	static int a;
private:
	static void to_visit_s() { //同样的也有私有静态成员函数
		cout << "这是私有静态成员函数" << endl;
	}
};

int Person::a = 1;

int main() {

	Person p1(10);
	cout << p1.a << endl;
	Person::to_visit();//同样也可以通过类名进行访问静态成员函数
	p1.to_visit(); //通过对象访问静态成员函数
	//Person::to_visit_s();
	system("pause");
	return 0;
}
原文地址:https://www.cnblogs.com/zpchcbd/p/11863233.html