#pragma once
class Student
{
public:
Student();
Student(char *pname, double); //有参构造函数
~Student();
public:
static double getAverageAge(); //静态成员函数
static int getTotalNumber(); //静态成员函数
void printStudentInfo(); //非静态成员函数
private:
static double m_averageAge; //所有学生平均年龄
static int m_totalNumber; //学生人数
char m_name[20]; //姓名
double m_age; //年龄
};
#include "stdafx.h"
#include "Student.h"
#include <iostream>
using namespace std;
double Student::m_averageAge =0; //所有学生平均年龄
int Student::m_totalNumber = 0; //学生人数
Student::Student()
{
}
Student::Student(char *pname, double age)
{
strcpy_s(m_name, pname);
m_age = age;
m_averageAge = m_totalNumber *m_averageAge + m_age; //总年龄
m_totalNumber++;
m_averageAge = m_averageAge / m_totalNumber; //新的平均值
}
Student::~Student() //销毁对象时,需要更新平均年龄
{
m_averageAge = m_totalNumber *m_age - m_age; //总年龄
m_totalNumber--;
m_averageAge = m_averageAge / m_totalNumber; //新的平均值
}
double Student::getAverageAge() //静态成员函数
{
return m_averageAge;
}
int Student::getTotalNumber() //静态成员函数
{
return m_totalNumber;
}
void Student::printStudentInfo() //非静态成员函数
{
cout << "学生的姓名为:" << m_name << endl;
cout << "学生的年龄为" << m_age << endl;
}
// jingtai_example.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Student.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Student student1("小明", 20);
Student student2("大栗子", 22);
Student student3("苹果", 25);
Student *ps = &student2; //定义一个指针
student1.printStudentInfo();
ps->printStudentInfo();
cout << "当前学生的数量为:" << Student::getTotalNumber() << endl;
cout << "当前学生的年龄为:" << Student::getAverageAge() << endl;
getchar();
return 0;
}
运行结果: