#在写的过程中多次出现worker.o:worker.cpp:(.text+0xa9): undefined reference to `Worker::TotalAge'这个报错,后来发现是
在使用静态变量的时候,由于静态变量不属于任何一个单独的对象,所以在创建对象的时候不会为其单独分配内存空间,需要在类中声明,在类外定义
任务描述
本关任务:需要随时知道在职工人的总人数和平均年龄。
相关知识
为了完成本关任务,你需要掌握:静态数据成员用于统计同类型对象集合的公有属性。
编程要求
根据提示,分别在worker.h、worker.cpp中补充代码完成工人总人数和平均年龄的统计,使其满足main函数的功能需求(工人新入职或离职时,实时计算总人数和平均年龄)。
测试说明
平台会对你编写的代码进行测试:
测试输入: Jerry 28
GaoFei 23
预期输出: 3 27
2 25.5
main
#include<iostream>
#include<string>
#include"worker.h"
using namespace std;
int main()
{ Worker a;
Worker b("Tom",30);
Worker c;
cout<<Worker::GetNum()<<' '<<Worker::AverageAge()<<endl;
b.~Worker();
cout<<Worker::GetNum()<<' '<<Worker::AverageAge()<<endl;
}
worker.h
/**********Program**********/
#include"worker.h"
#include<iostream>
using namespace std;
double Worker::TotalAge;//在使用静态变量的时候,由于静态变量不属于任何一个单独的对象,
//所以在创建对象的时候不会为其单独分配内存空间,需要在类中声明,在类外定义
int Worker::TotalNumber;
Worker::Worker(const char ch[],int na)
{
name=ch;
age=na;
TotalAge=TotalAge+na;
TotalNumber++;
}
Worker::Worker(){
string t;int a;
cin>>t>>a;
TotalAge=TotalAge+a;
TotalNumber++;
}
Worker::~Worker(){
TotalAge=TotalAge-age;
TotalNumber=TotalNumber-1;
}
double Worker::AverageAge(){
return TotalAge/TotalNumber;
}
int Worker::GetNum(){
return TotalNumber;
}
/********** End **********/
worker.h
#ifndef WORKER_H
#define WORKER_H
#include<string>
using namespace std;
class Worker{
private:
int age;
string name;
static int TotalNumber;
static double TotalAge;
public:
Worker();
Worker(const char ch[],int na);
~Worker();
static int GetNum();
static double AverageAge();
};
#endif