首页 理论教育C++程序设计基础教程-静态成员函数

C++程序设计基础教程-静态成员函数

【摘要】:静态成员函数与静态数据成员类似,也是属于类的。与一般成员函数类似,静态成员函数也有访问限制,私有静态成员函数不能由外界访问。解:本程序的执行结果如下:s=5程序中定义对象a时,通过构造函数使静态数据成员n=2,在定义对象b时,通过构造函数使静态数据成员n=5,再执行MyClass2∷add()语句使全局变量s=5。这样共执行构造函数5次,n累计为5。

静态成员函数与静态数据成员类似,也是属于类的。只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数定义前加上static关键字,定义静态成员函数的格式如下:

调用静态成员函数的格式如下:

类名∷静态成员函数名(实参表)

允许用对象或指向对象的指针调用静态成员函数,格式如下:

对象名.静态成员函数名(实参表)

对象指针->静态成员函数名(实参表)

注意:静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员(因为非静态数据成员只有对象存在时才有意义)。但静态数据成员和静态成员函数可由任意访问权限许可的函数访问。与一般成员函数类似,静态成员函数也有访问限制,私有静态成员函数不能由外界访问。

【例3.2】分析以下程序的执行结果。

解:本程序的执行结果如下:

s=5

程序中定义对象a(2)时,通过构造函数使静态数据成员n=2,在定义对象b(5)时,通过构造函数使静态数据成员n=5(覆盖前面n=2),再执行MyClass2∷add()语句使全局变量s=5。

注意:尽管代码中静态数据成员n的初始化语句int MyClass2∷add()n=0没有意义(因为各对象中的n值由变量i赋给),但不能省略,否则会出现编译错误。

【例3.3】分析以下程序的执行结果。

解:上述程序中,先说明了一个类MyClass3,其中有一个静态数据成员n,并给它赋初值。在main()中,先定义一个指向匿名对象的指针p(创建该匿名对象时也要自动调用MyClass3类的构造函数),另外定义了一个含有4个对象元素的数组。这样共执行构造函数5次,n累计为5。程序执行结果如下:(www.chuimin.cn)

n=5

【例3.4】编写一个程序,已有若干个学生数据,这些数据包括学号、姓名、语文成绩、计算机成绩和英语成绩,求各门课程的平均分。要求设计不同的成员函数求各门课程的平均分,并使用成员函数指针调用它们。

解:设计一个学生类student,包括no(学号)、name(姓名)、grade1(语文成绩)、grade 2(计算机成绩)、grade 3(英语成绩)数据成员和3个静态数据成员sum1(累计语文总分)、sum2(累计计算机总分)、sum3(累计英语总分);另外有一个构造函数和3个求三门课程平均分的成员函数和一个display()成员函数。程序如下:

本程序的执行结果如下:

输出结果

学号  姓名  语文  数学  英语

1   Li   60   80   90

2   Ma  70  85  99

3 Zheng  80  89  90

4 Chen  50  60  70

语文平均分:65

数学平均分:78.5

英语平均分:87.25