文章目录
1、静态成员:1.1、说明1.2、格式 2、静态成员函数2.1、说明2.2、格式1、静态成员:
1.1、说明
静态成员包括静态数据和静态成员函数。
(1)、静态数据成员的定义与普通数据成员相似,但要在前面加static关键字。
(2)、静态变量一定要进行初始化:一般初始化位置在main函数之前、类声明之后。
1.2、格式
初始化格式:
数据类型 类名::静态数据成员名=初始值;
示例如下:
#include<iostream>using namespace std;class score{public:static int number;//静态数据成员... };...int score::number=0; //对静态数据成员初始化
(3)、静态数据成员属于类,因此可以使用”类名::”访问静态的数据成员。
访问格式:
类名::静态数据成员名
(4)、静态数据成员与静态变量一样,是在编译时创建并初始化。在该类的任何对象被建立之前就存在。
公有的静态数据成员可以在对象定义之前被访问。
对象定义后,公有的静态数据成员也可以通过对象进行访问。
用对象访问静态数据成员的格式如下:
对象名.静态数据成员名;
对象指针->静态数据成员名;
示例如下:
#include<iostream>using namespace std;class score{public:static int number; //定义静态成员 };int score::number=0; //对静态数据成员初始化 int main(){score::number=10; //公有静态数据成员可以在对象定义之前被访问score ob,*p;p=&ob;cout<<"ob.number:"<<ob.number<<endl; //通过对象访问公有静态数据成员numbercout<<"score::number:"<<score::number<<endl; //通过类名访问公有静态数据成员numbercout<<"p->number"<<p->number<<endl;//通过对象指针公有静态数据成员numberreturn 0; }
运行结果如下:
ob.number:10score::number:10p->number10
(5)、在类外,私有的静态数据成员不能被直接访问,必须通过公有的成员函数访问。
(6)、C++支持静态数据成员的一个主要原因是可以不必使用全局变量。
2、静态成员函数
2.1、说明
静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针。
一般而言,静态成员函数不访问类中的非静态成员。若确实需要访问非静态数据成员,静态成员函数只能通过对象名(或对象指针、对象引用)访问该对象的非静态成员。
2.2、格式
定义静态成员函数的格式如下:
static 返回类型 静态成员函数名();
调用公有静态成员函数的一般格式为:
类名::静态成员函数名()
对象.静态成员函数名()
对象指针->静态成员函数名()
示例代码如下:
#include <iostream>using namespace std;class score{public: //公有score(int a,int b); //公有成员函数 static void showscore(); //静态成员函数private://私有 int mid_exam; //私有成员函数 int fin_exam; //私有成员函数static int count;//统计数量 static double sum; //统计累加值 static double ave; //统计平均值 };score::score(int a,int b){count++; //累加数量 mid_exam=a;fin_exam=b;sum+=fin_exam;//累加值ave=sum/count;//平均值} void score::showscore(){cout<<"人数"<<count<<endl; cout<<"累加分数"<<sum<<endl;cout<<"平均成绩"<<ave<<endl; }int score::count=0; //初始化 double score::sum=0.0;double score::ave=0.0;int main(){score rec[3]={//定义对象数组 score(70,71),score(80,81),score(90,91)};rec[3].showscore();//用对象名访问 score::showscore();//用类名访问 return 0;}
运行结果如下:
人数3累加分数243平均成绩81人数3累加分数243平均成绩81
(1)、一般情况下,静态函数成员主要用来访问静态数据成员。当它与静态数据成员一起使用时,达到了对同一个类中对象之间共享数据的目的。
(2)、私有静态成员函数不能被类外部的函数和对象访问。
(3)、可以用静态成员函数在建立任何一个对象之前调用静态成员函数,以处理静态数据成员。
(4)、静态成员函数是类的一部分,而不是对象的一部分。
如果要在类外调用公有的静态成员函数,使用如下格式较好:
类名::静态成员函数名()