static

c中的static、C++中static拓展

  • 在c中的作用C++中依然保留:
  1. 修饰变量:放在静态区,只初始化一次,局部变量下次使用还是上次值;全局变量只能在本文件中访问。
  2. 修饰函数:只对本文件可见,其他文件不能使用,也可以定义重名函数。
  • C++拓展
  1. static修饰成员变量:变量在类内声明,在类外定义,类之间共享。


static修饰类中成员变量

  • 依然存放在静态区,初始化需要在类的外面进行。
  • 静态成员变量 属于整个类,不属于某个对象,所以对象之间共享;而且计算每个对象的大小也不包含静态变量。
  • 静态成员变量在main函数之间就已经分配空间,所以可以通过对象访问,也可以通过类名访问如:Person::m_b
class Person
{
public:
	Person(int a):m_a(a){}

static int m_b;
private:
	int m_a;
};


int Person::m_b =10;  //静态成员变量需要在类外初始化

int main(void)
{
	Person A(1), B(2);
	A.m_b++;  //m_b=11
	B.m_b++;  //m_b=12
	Person::m_b++; //m_b=13;
}



static修饰类中成员函数

  • 上面的例子申明的m_b是public,如果是private,则在外部访问不了,需要提供静态函数(只能调用静态成员变量,但是普通函数可以调用静态变量;因为不属于具体对象所以没有this指针):
class Person
{
public:
	Person(int a):m_a(a){}

	static int& Getb(void)
	{
		return m_b;
	}
private:
	int m_a;
	static int m_b;
};

int Person::m_b =10;  //静态成员变量需要在类外初始化

int main(void)
{
	Person A(1), B(2);
	A.Getb()++;   //返回的是引用可以作为左值 , 结果 11
	B.Getb()++;   //结果 12
	Person::Getb()++;   //结果 13
	cout << Person::Getb() << endl;

}





static 实例

  • 问题描述:有一个学生类,每个学生考试都有得分,创建几个学生;求最后学生个数和平均分
#include "stdafx.h"
#include <iostream>

using namespace std;
class Student
{
public:
	Student(int a) :m_score(a)  //每构造一个学生,个数和分数就累加
	{
		num++;
		sum_score += m_score;
	}


	static double& Get_Sum(void) //提供静态方法,获取总分
	{
		return sum_score;
	}

	static int& Get_Num(void) //提供静态方法,获取总人数
	{
		return num;
	}

	~Student()
	{
		num--;
		sum_score -= m_score;
	}
private:
	int m_score;
	static int num;
	static double sum_score;

};

int Student::num = 0;  //静态成员变量需要在类外初始化
double Student::sum_score = 0.0;


int main(void)
{
	Student A1(1);
	Student A2(2);
	Student A3(3);
	Student A4(4);
	Student A5(5);
	Student A6(6);

	cout << "total number of students: " << Student::Get_Num() << endl;
	cout << "the average score is: " << Student::Get_Sum() / Student::Get_Num() << endl;
    return 0;
}


结果:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值