成员函数也是可以定义成静态的,在类中声明函数的前面加static就成了静态成员函数。如:
static int volume();
和静态数据成员一样,静态成员函数是类的一部分而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“::”。如:
Box::volume();
静态成员函数没有this函数。
静态成员函数,不影响其继承和被使用的权限。
#include <iostream>
using namespace std;
class Student
{
public:
Student(int n, int a, float s) :num(n), age(a), score(s) {}//定义带参数的构造函数
void total();
static float average();
private:
int num;
int age;
float score;
static float sum; //声明sum为静态数据成员,sum是属于类的而不是属于某个具体的对象
static int count;
};
void Student::total()
{
sum += score;
count++;
}
float Student::average()
{
return(sum/count);
}
float Student::sum = 0;//对静态成员变量进行初始化,为其申请内存空间。
int Student::count = 0;//对静态成员变量进行初始化,为其申请内存空间。
int main()
{
Student stud[3] = {Student(1001,18,70),Student(1002,19,78) ,Student(1003,20,98) };
int n;
cout << "please input the number of student:";
cin >> n;//输入需要求前面多少名学生的平均成绩
for (int i = 0; i < n; ++i)
{
stud[i].total();
}
cout << "the average score of" << n << "student is" << Student::average() << endl;
return 0;
}
公用的成员函数可以引用本对象中的一般数据成员(非静态数据成员),也可以引用类中的静态数据成员。
应当养成习惯,只有静态函数引用静态成员变量,而不引用非静态数据成员。