300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > C++学习(五) 静态数据成员和静态成员函数

C++学习(五) 静态数据成员和静态成员函数

时间:2022-11-21 22:33:12

相关推荐

C++学习(五) 静态数据成员和静态成员函数

文章目录

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)、静态成员函数是类的一部分,而不是对象的一部分。

如果要在类外调用公有的静态成员函数,使用如下格式较好:

类名::静态成员函数名()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。