C++ 使用静态变量和静态方法统计学生分数和学生个数

#include <iostream>
#include <cstdlib>

using namespace std;

int strlen(const char s[]){
	int len = 0;
	
	while (s[len]){
		len++;
	}
	return len;  // 返回数组str中首个值为null的元素的下标值
}

char* strcpy(char *p, const char *s){
	char *t = p;
	
	while (*p++ = *s++){
		
	}
	
	return t;
}


class Student {
	private:
		int m_id; // 学生编号 
		double m_score; // 学生分数
		char *m_name; 

		// 统计学生个数的静态成员变量
		static int m_count;

		// 统计学生总分数的静态成员变量
		static double sum_score;

	public:
		Student(int id, const char *name ,double score) {
			// 创建一个学生
			m_id = id;
			m_score = score;

			m_count++; // 对创建的学生对象的人数进行累加 
			sum_score += score;  // 对创建的学生对象的分数进行累加 
			
			//给姓名赋值
			int len = strlen(name);
			m_name = (char*)malloc(len + 1);
			strcpy(m_name, name);
		}

		static int getCount() {  // 提供一个访问学生人数的静态方法 
			return m_count;
		}

		static double getAvg() {   // 提供一个访问平均分的静态方法 
			return sum_score / m_count;
		}
		
		int getId(){
			return m_id;
		}
		
		char* getName(){
			return m_name;
		}
		
		double getScore(){
			return m_score;
		}
		

		~Student() {
			m_count--;   // 每析构一个对象,数量减去一 
			sum_score -= m_score; // 析构一个对象,减去对象对应的学生分数 
			
			if (m_name != NULL) {
				free(m_name);   // 消除占用空间 
				m_name = NULL;
			}
		}
};


int Student::m_count = 0;  // 对静态变量进行初始化 

double Student::sum_score = 0.0; // 对静态变量进行初始化 

int main(){
	Student *s1 = new Student(1, "vvcat1", 88);
	Student *s2 = new Student(2, "vvcat2", 95);
	Student *s3 = new Student(3, "vvcat3", 99);
	Student *s4 = new Student(4, "vvcat4", 77);
	Student *s5 = new Student(5, "vvcat5", 96);
	
	cout << "----------学生成绩列表-------------" << endl;
	cout << "编号           姓名            成绩" << endl;
	cout << s1 -> getScore();
	cout << "            ";
	cout << s1 -> getName();
	cout << "            ";
	cout << s1 -> getScore();
	cout << endl;
	
	cout << s2 -> getScore();
	cout << "            ";
	cout << s2 -> getName();
	cout << "            ";
	cout << s2 -> getScore();
	cout << endl;
	
	cout << s3 -> getScore();
	cout << "            ";
	cout << s3 -> getName();
	cout << "            ";
	cout << s3 -> getScore();
	cout << endl;
	
	
	cout << s4 -> getScore();
	cout << "            ";
	cout << s4 -> getName();
	cout << "            ";
	cout << s4 -> getScore();
	cout << endl;
	
	cout << s5 -> getScore();
	cout << "            ";
	cout << s5 -> getName();
	cout << "            ";
	cout << s5 -> getScore();
	cout << endl;
	
	cout << "-----------------------------------" << endl;
	cout << "学生总人数:" << Student::getCount() << endl;
	cout << "学生的平均分:" << Student::getAvg() << endl;
	
	
	// 调用析构函数 
	delete s5;  
	delete s4;
	delete s3;
	delete s2;
	delete s1;

	return 0;
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值