C++学习——静态成员

静态成员包括 静态数据成员 和 静态成员函数。当一个类的成员说明为static时,该类创建的所有对象都共享这个static成员,因此,静态成员是局部于类,而不是某个对象的特有成员。


静态数据成员:

如果定义n个同类的对象,那么每个对象都分别拥有自己的数据成员,各自有值,互不相关。有时需要某些数据成员在同类的多个对象之间可以共享,这就需要应用静态数据成员来实现。

在一个类中,若将一个数据成员说明为static,则该数据称为静态数据成员,它告诉编译器,无论建立多少个该类的对象,所有对象都共享一份静态数据成员。因此,静态数据的值对每个对象都是一样的。对静态数据成员的更新,就是对所有对象的该静态数据成员值的更新。

#include
   
   
    
    >num;
    cout<<"name?";
    cin>>name;
    cout<<"age?";
    cin>>age;
}

void Student::Disp()
{
    cout<<"学生的基本信息";
    cout<"学号"<
    
    
   
   

代码运行结果:
0  1  1   2   2  2



说明:
1、静态数据成员只在类内声明时使用static关键字。
2、静态数据成员一定要在类体外进行初始化。
3、一般数据成员是在对象建立时分配控件,在对象删除时释放空间。而静态数据成员是在程序编译时分配空间,到程序结束时释放空间。
4、静态数据成员在所有对象之外单独存放,而不占用对象的存储空间。
5、与普通的数据成员一样,静态数据成员也有public、private、protected之分。在类外只能访问public的静态数据成员,不能访问private、protected的静态数据成员,访问形式有两种:

类名::静态数据成员名
对象名.静态数据成员名


静态成员函数:

静态成员函数主要用来访问类的静态成员,不能直接访问类的非静态成员。与静态数据成员一样,类外调用public静态成员函数时候,可有两种形式:

<类名>::<静态成员函数名>(<参数表>)
<对象名>.<静态成员函数名>(<参数表>)
/*
题目:已知班级学生的学号、姓名、英语成绩、数学成绩,求各门功课的平均成绩。要求能单独求出某门课程的平均成绩。

分析:数据成员
	  对象独有:num(学号)、name(姓名)、english(英语成绩)、math(数学成绩)
	  对象共享:number(人数)、sum1(英语总分)、sum2(数学总分),定义为static成员
分析:成员函数
	  构造函数:对num、name、english、math数据成员进行初始化,并累加统计总人数。
	  求总分函数Total:计算总成绩sum1、sum2
	  求平均值函数Aver1、Aver2:类内所有对象共享定义为static成员
*/

#include
     
     
      
      
using namespace std;

class Student
{
    public:
        Student();
        void Init();
        void Disp();
        void Total();
        static float Aver1();
        static float Aver2();
        static int number;
        static float sum1;
        static float sum2;
    private:
        int num;
        char name[10];
        float english;
        float math;
};

int Student::number = 0;
int Student::sum1 = 0;
int Student::sum2 = 2;

Student::Student()
{
    Init();
    number+=1;
}

void Student::Init()
{
    cout<<"xuehao?";
    cin>>num;
    cout<<"name?";
    cin>>name;
    cout<<"english score?";
    cin>>english;
    cout<<"math score";
    cin>>math;
    
}
    
Void Student::Disp()
{
    cout<<"xuehao:"<
      
      
     
     


说明:

1、静态成员函数是一个特殊的成员函数,它的调用不依赖于任何一个特定的对象,因此静态成员函数中没用隐含的this指针,因此,即使通过对象调用也不会传递当前对象的地址,所以,在静态成员函数中,如果要引用非静态成员则要提供访问的对象。一般,静态成员函数主要是引用静态成员。
2、静态成员函数可以实现在建立任何对象之前处理静态数据成员,完成建立任何对象之前都需要的与操作,这是非静态成员函数所不能实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值