类和对象-对象的初始化和清理-静态成员函数

静态成员函数

  1. 所有对象共享同一个函数
  2. 静态成员函数只能访问静态成员变量
  • 所有对象共享同一个函数
class Person {
public:

	static void func() {
		cout << "static void func调用" << endl;
	}
};


//有两种访问方式
void test01() {
	//1、通过对象访问
	Person p;
	p.func();

	//2、通过类名访问
	Person::func();
}

运行结果
在这里插入图片描述

为什么有第二种访问方式?
因为所有对象共享同一个函数,所有可以通过类名对函数进行调用。

  • 静态成员函数只能访问静态成员变量

我们添加两个变量,一个静态变量,一个非静态变量。并且在静态函数里进行赋值。

class Person {
public:

	static void func() {
		m_A = 100;//静态成员函数 可以访问 静态成员变量
		m_B = 200;//静态成员函数 不可以访问 非静态成员变量,无法区分到底是哪个对象的m_B属性
		cout << "static void func调用" << endl;
	}


	static int m_A;//静态成员变量
	int m_B;//非静态成员变量
};

int Person::m_A = 0;

//有两种访问方式
void test01() {
	//1、通过对象访问
	Person p;
	p.func();

	//2、通过类名访问
	Person::func();
}

此时编译器会报错。

在这里插入图片描述

意思为:非静态变量不可以在静态函数下进行赋值。

那么为什么会报错呢?

我们假设创建了两个对象p1和p2

在这里插入图片描述

那么如果修改m_B,是对p1的m_B进行修改还是对p2的m_B进行修改。编译器无法做出判断,而m_A属于静态变量,所有属性都共享。
在这里插入图片描述

所有非静态变量不可以在静态函数下进行赋值

  • 静态成员函数有访问权限的
class Person {
private:

	static void func2() {
		cout << "static void func2调用" << endl;
	}
};

//有两种访问方式
void test01() {
	Person::func2();
}

此时会报错
类外访问不到私有静态函数
在这里插入图片描述

总结:

#include<iostream>
using namespace std;

//静态成员函数
//所有对象共享同一个函数
//静态成员函数只能访问静态成员变量

class Person {
public:

	static void func() {
		m_A = 100;//静态成员函数 可以访问 静态成员变量
		//m_B = 200;//静态成员函数 不可以访问 非静态成员变量,无法区分到底是哪个对象的m_B属性
		cout << "static void func调用" << endl;
	}
	
	//静态成员函数也是有访问权限的
private:

	static void func2() {
		cout << "static void func2调用" << endl;
	}

	static int m_A;//静态成员变量
	int m_B;//非静态成员变量
};

int Person::m_A = 0;

//有两种访问方式
void test01() {
	//1、通过对象访问
	Person p;
	p.func();

	//2、通过类名访问
	Person::func();

	//类外访问不到静态私有函数
	//Person::func2();
}

int main() {

	test01();

	system("pause");

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值