关于类中静态成员函数和静态成员变量的知识点

本文深入探讨了类中静态成员函数的特点与使用场景,强调其独立于对象的特性及限制,同时解析静态成员变量的存储与访问机制,提供代码示例说明静态成员的共享性质。

类中的静态成员函数:

1.函数的行为对所有派生类都一致时,可以声明为静态。

2.因为静态成员函数只跟类有关跟类的实例无关,因此它不需要this指针

3.静态成员函数由于是不与任何对象相关联的,所以是没有this指针的。从这里也可以知道静态成员函数无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其他的静态成员函数。即静态成员函数不能访问非静态成员(非静态成员函数或者非静态成员变量),但是非静态成员可以直接访问静态成员。

例子:

#include<iostream>
using namespace std;
class MyClass
{
public:
	MyClass(int a, int b, int c);
	static  void func();
	void printf()
	{
		cout << sum << endl;
	}
private:
	int a, b, c;
	static int sum;//静态成员变量的声明
};
int MyClass::sum = 0;//静态成员变量必须在类外定义和初始化
MyClass::MyClass(int a, int b, int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
	sum += a + b + c;
}
void MyClass::func()
{
	cout << sum << endl;
}
int main()
{
	MyClass A(1, 2, 3);
	A.func();
	A.printf();
	MyClass B(4, 5, 6);
	B.func();
	B.printf();
	//MyClass::printf();//错误,非静态成员函数必须与特定对象相对
	MyClass::func();//静态成员函数是类中的所有对象共享的,并不但属于特定对象
	return 0;
}

  运行结果:

 

类中的静态成员变量:

1.静态成员变量是整个类的实例共享的

2.静态成员变量存储在静态存储区/全局存储局,而非静态成员变量需要实例化才会分配内存。

3.静态成员变量只能在类内声明在类外定义和初始化。

为什么静态成员变量不能在类内定义?

答:为了防止重复定义,静态成员变量是类的所有实例共享的,只需要定义一次就可以,如果在类内定义则每实例化一次类都会重新定义一次静态成员变量,这会产生重复定义。

静态成员不能访问非静态成员,非静态成员可以直接访问类中的静态成员。

转载于:https://www.cnblogs.com/wuyepeng/p/9880244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值