Bài tập

Bạn hãy tạo ra lớp Student với các thông tin giống như trong sơ đồ lớp sau:

Giải thích sơ đồ lớp:

Lớp Student

  • name, math, physic, chemistry lần lượt là các thuộc tính chỉ tên học sinh, điểm toán, điểm lý, điểm hóa của một học sinh và có phạm vi truy cập là private.
  • Student() là phương thức khởi tạo không tham số.
  • Student(Student(name: string, math: double, physic: double, chemistry: double) là phương thức khởi tạo có tham số dùng để khởi tạo giá trị cho các thuộc tính tương ứng.
  • display() là phương thức dùng để hiển thị thông tin của đối tượng ra màn hình. Ví dụ nếu name = "Hieu", math = 6, physic = 7, chemistry = 5 thì khi gọi phương thức này màn hình sẽ hiển thị ra:
    • Name: Hieu
      Point math: 6
      Point physic: 7
      Point chemistry: 5
      Average: 6
  • avgPoint() là phương thức trả về tổng điểm trung bình.
  • getStudentMaxAvg(vt: vector<Student>): static vector<Student> là phương thức tĩnh trả về một danh sách các học sinh có điểm trung bình cao nhất.
  • getStudentMaxMath(vt: vector<Student>): static vector<Student> là phương thức tĩnh trả về một danh sách các học sinh có điểm toán cao nhất.
  • getStudentMaxPhysic(vt: vector<Student>): static vector<Student> là phương thức tĩnh trả về một danh sách các học sinh có điểm lý cao nhất.
  • getStudentMaxChemistry(vt: vector<Student>): static vector<Student> là phương thức tĩnh trả về một danh sách các học sinh có điểm hóa cao nhất.
  • Các phương thức còn lại là gettersetter.

Hướng dẫn

Code mẫu:

File Student.cpp

#include <iostream>
#include <vector>
using namespace std;

class Student {
private:
	string name;
	double math;
	double physic;
	double chemistry;
public:
	Student() {}
	Student(string name, double math, double physic, double chemistry)
	{
		this->name = name;
		this->math = math;
		this->physic = physic;
		this->chemistry = chemistry;
	}
	double getMath()
	{
		return math;
	}
	double getPhysic()
	{
		return physic;
	}
	double getChemistry()
	{
		return chemistry;
	}
	void display()
	{
		cout << "Name: " << this->name << endl;
		cout << "Point math: " << this->math << endl;
		cout << "Point physic: " << this->physic << endl;
		cout << "Point chemistry: " << this->chemistry << endl;
		cout << "Average: " << avgPoint() << endl;
	}
	double avgPoint()
	{
		return (math + physic + chemistry) / 3;
	}
	static vector<Student> getStudentMaxAvg(vector<Student> vt)
	{
		double max = vt[0].avgPoint();
		vector<Student> v;
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i].avgPoint() > max)
			{
				max = vt[i].avgPoint();
			}
		}
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].avgPoint() == max)
			{
				v.push_back(vt[i]);
			}
		}
		return v;
	}
	static vector<Student> getStudentMaxMath(vector<Student> vt)
	{
		double max = vt[0].getMath();
		vector<Student> v;
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i].getMath() > max)
			{
				max = vt[i].getMath();
			}
		}
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getMath() == max)
			{
				v.push_back(vt[i]);
			}
		}
		return v;
	}
	static vector<Student> getStudentMaxPhysic(vector<Student> vt)
	{
		double max = vt[0].getPhysic();
		vector<Student> v;
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i].getPhysic() > max)
			{
				max = vt[i].getPhysic();
			}
		}
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getPhysic() == max)
			{
				v.push_back(vt[i]);
			}
		}
		return v;
	}
	static vector<Student> getStudentMaxChemistry(vector<Student> vt)
	{
		double max = vt[0].getChemistry();
		vector<Student> v;
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i].getChemistry() > max)
			{
				max = vt[i].getChemistry();
			}
		}
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getChemistry() == max)
			{
				v.push_back(vt[i]);
			}
		}
		return v;
	}
};