static 静态成员变量和静态函数 C++

本文深入探讨了C++中静态成员变量和静态成员函数的概念,解释了它们如何实现信息共享和管理静态数据成员,以及在类中初始化和访问的具体方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1, static 成员变量实现了同类对象间信息共享。
2, static 成员类外存储, 求类大小, 并不包含在内。
3, static 成员是命名空间属于类的全局变量, 存储在 data 区。  不在堆栈中。
4, static 成员只能类外初始化。!!! 无论是private 还是public
5, 可以通过类名访问(无对象生成时亦可), 也可以通过对象访问。
 
1, 静态成员函数的意义, 不在于信息共享, 数据沟通, 而在于管理静态数据成员, 完
成对静态数据成员的封装。
2, 静态成员函数只能访问静态数据成员。 原因 : 非静态成员函数, 在调用时this 指
针被当作参数传进。而静态成员函数属于类, 而不属于对象, 没有 this 指针。

 




#if 0
1, static 成员变量实现了同类对象间信息共享。
2, static 成员类外存储, 求类大小, 并不包含在内。
3, static 成员是命名空间属于类的全局变量, 存储在 data 区。  不在堆栈中。
4, static 成员只能类外初始化。!!! 无论是private 还是public
5, 可以通过类名访问(无对象生成时亦可), 也可以通过对象访问。


1, 静态成员函数的意义, 不在于信息共享, 数据沟通, 而在于管理静态数据成员, 完
成对静态数据成员的封装。
2, 静态成员函数只能访问静态数据成员。 原因 : 非静态成员函数, 在调用时this 指
针被当作参数传进。而静态成员函数属于类, 而不属于对象, 没有 this 指针。

#endif


#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;


class Student
{
public:
	Student(int id,double score)
	{
		m_id = id;
		m_score = score;
		count++;
		sum += score;
	}
	~Student()
	{
		count--;
		sum -= m_score;
	}
	//静态成员函数只能访问静态数据成员。
	static double getCount()
	{
		return  count;
	}
	static double getAverage() 
	{
		return sum / count;
	}


//初始化必须在类外部
//因为是公有成员,类外可以直接使用 Student::count
//	static int count;//记录学生总数
//	static double sum;//记录学生总分

private:
	int m_id;
	double m_score;
	
	//初始化必须在类外部
	//因为是私有成员,类外不能直接使用
	static int count;//记录学生总数
	static double sum;//记录学生总分

};

//初始化必须在类外部
int Student::count = 0;
double Student::sum = 0;



int main()
{
	Student s1(10, 80);
	Student s2(11, 90);
	Student s3(12, 100);

	cout << "学生个数是: " << Student::getCount() << endl;
	cout << "平均分是: " << Student::getAverage() << endl;

	//如果count和sum在public中,可以直接使用
	//cout << "学生个数是: " << Student::count << endl;
	//cout << "平均分是: " << Student::sum/Student::count << endl;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值