C++学习——静态成员

来源:互联网 发布:数据清洗与整合平台 编辑:程序博客网 时间:2024/06/05 18:18

静态成员包括 静态数据成员 和 静态成员函数。当一个类的成员说明为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成员*/#includeusing 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、静态成员函数可以实现在建立任何对象之前处理静态数据成员,完成建立任何对象之前都需要的与操作,这是非静态成员函数所不能实现的。

原创粉丝点击