Bài tập

Bạn hãy tạo 3 lớp Score, ScoreNatual, ScoreSocial với các thông tin như sau:

Giải thích:

Một thí sinh khi tham gia thi đại học sẽ có các môn bắt buộc phải thi là toán, văn, anh. Ngoài ra thí sinh phải chọn thêm một tổ hợp thi kèm là khoa học tự nhiên bao gồm các môn lý, hóa, sinh hoặc khoa học xã hội bao gồm các môn giáo dục công dân, lịch sử, địa lý.

Lớp Score:

  • math, literature, english lần lượt là các thuộc tính chỉ điểm toán, văn, anh có phạm vi truy cập protected.
  • Score() là phương thức khởi tạo không tham số.
  • Score(math: double, literature: double, english: double) là phương thức khởi tạo 3 tham số.
  • pointA(): virtual double là phương thức ảo trả về điểm của khối A tính bằng điểm math + physic + chemistry.
  • pointB(): virtual double là phương thức ảo trả về điểm của khối B tính bằng điểm math + chemistry + biology.
  • pointC(): virtual double là phương thức ảo trả về điểm của khối C tính bằng điểm literature + history + geography.
  • pointD(): virtual double là phương thức ảo trả về điểm của khối D tính bằng điểm math+literature+english.
  • avgPoint(): virtual double = 0 là phương thức thuần ảo trả về điểm trung bình của cả kì thi. Bao gồm các môn thi chính và tổ hợp kèm theo. Ví dụ thí sinh thi kèm tổ hợp khoa học tự nhiên thì avgPoint() trả về  (physic + chemistry + biology + math + literature + english)/6.
  • getMaxAvg(vt: vector<Score*>): static double là phương thức tĩnh trả về avgPoint() cao nhất.
  • getMinAvg(vt: vector<Score*>): static double là phương thức tĩnh trả về avgPoint() thấp nhất.
  • isPass(): bool là phương thức kiểm tra xem thí sinh có đỗ tốt nghiệp hay không. Trả về true nếu avgPoint()>5false ngược lại.
  • getMaxPointA(vt: vector<Score*>): static double là phương thức trả về điểm khối A cao nhất. Điểm khối A = toán + lý + hóa.
  • getMaxPointB(vt: vector<Score*>): static double là phương thức trả về điểm khối B cao nhất. Điểm khối B = toán + hóa + sinh.
  • getMaxPointC(vt: vector<Score*>): static double là phương thức trả về điểm khối C cao nhất. Điểm khối C = văn + sử + địa
  • getMaxPointD(vt: vector<Score*>): static double là phương thức trả về điểm khối D cao nhất. Điểm khối D = toán + văn + anh.
  • Các phương thức còn lại là gettersetter.

Lớp ScoreNatural:

  • Là lớp kế thừa public từ lớp Score.
  • physic, chemistry, biology lần lượt là các thuộc tính chỉ điểm lý, hóa, sinh có phạm vi truy cập private.
  • ScoreNatural() là phương thức khởi tạo không tham số.
  • ScoreNatural(math: double, literature: double, english: double, physic: double, chemistry: double, biology: double) là phương thức khởi tạo 6 tham số.
  • PointA(): double là phương thức trả về tổng điểm khối A.
  • PointB(): double là phương thức trả về tổng điểm khối B.
  • pointNatural(): double là phương thức trả về tổng điểm của bài khoa học tự nhiên.
  • avgPoint(): double là phương thức trả về điểm trung bình của cả kì thi.
  • Các phương thức còn lại là gettersetter.

Lớp ScoreSocial

  • Là lớp kế thừa public từ lớp Score.
  • ce, geography, history lần lượt là các phương thức chỉ điểm môn giáo dục công dân, địa lí, lịch sử có phạm vi truy cập private.
  • ScoreNatural() là phương thức khởi tạo không tham số.
  • ScoreNatural(math: double, literature: double, english: double, ce: double, geography: double, history: double) là phương thức khởi tạo 6 tham số.
  • pointC(): double là phương thức trả về điểm khối C.
  • pointNatural(): double là phương thức trả về tổng điểm bài thi tổ hợp khoa học xã hội.
  • avgPoint(): double là phương thức trả về điểm trung bình của cả kì thi.
  • Các phương thức còn lại là gettersetter.

Hướng dẫn

 File Score.cpp

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

class Score {
protected:
	double math;
	double literature;
	double english;
public:
	Score() {}
	Score(double math, double literature, double english) : math(math), literature(literature), english(english) {}
	double getMath()
	{
		return math;
	}
	double getLiterature()
	{
		return literature;
	}
	double getEnglish()
	{
		return english;
	}
	virtual double pointA()
	{
		return 0;
	}
	virtual double pointB()
	{
		return 0;
	}
	virtual double pointC()
	{
		return 0;
	}
	virtual double pointD()
	{
		return math + literature + english;
	}
	virtual double avgPoint() = 0;
	virtual void display()
	{
		cout << "Avg = " << avgPoint() << endl;
	}
	static double getMaxAvg(vector<Score*>vt)
	{
		double max = vt[0]->avgPoint();
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i]->avgPoint() > max)
			{
				max = vt[i]->avgPoint();
			}
		}
		return max;
	}
	static double getMinAvg(vector<Score*>vt)
	{
		double min = vt[0]->avgPoint();
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i]->avgPoint() < min)
			{
				min = vt[i]->avgPoint();
			}
		}
		return min;
	}
	bool isPass()
	{
		if (avgPoint() > 5)
		{
			return true;
		}
		return false;
	}
	static double getMaxPointA(vector<Score*>vt)
	{
		double max = vt[0]->pointA();
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i]->pointA() > max)
			{
				max = vt[i]->pointA();
			}
		}
		return max;
	}
	static double getMaxPointD(vector<Score*>vt)
	{
		double max = vt[0]->pointD();
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i]->pointD() > max)
			{
				max = vt[i]->pointD();
			}
		}
		return max;
	}
	static double getMaxPointB(vector<Score*>vt)
	{
		double max = vt[0]->pointB();
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i]->pointB() > max)
			{
				max = vt[i]->pointB();
			}
		}
		return max;
	}
	static double getMaxPointC(vector<Score*>vt)
	{
		double max = vt[0]->pointA();
		for (int i = 1; i < vt.size(); i++)
		{
			if (vt[i]->pointC() > max)
			{
				max = vt[i]->pointC();
			}
		}
		return max;
	}
};

 File ScoreNatural.cpp

#pragma once
#include "Score.cpp"
class ScoreNatural : public Score {
private:
	double physic;
	double chemistry;
	double biology;
public:
	ScoreNatural() {}
	ScoreNatural(double math, double literature, double english, double physic, double chemistry, double biology)
		:Score(math, literature, english), physic(physic), chemistry(chemistry), biology(biology) {}
	double getPhysic()
	{
		return physic;
	}
	double getChemistry()
	{
		return chemistry;
	}
	double getBiology()
	{
		return biology;
	}
	double pointA()
	{
		return math + chemistry + physic;
	}
	double pointB()
	{
		return math + chemistry + biology;
	}
	double pointNatual()
	{
		return physic + chemistry + biology;
	}
	double avgPoint()
	{
		return (physic + chemistry + biology + math + literature + english) / 6;
	}

};

 File ScoreSocial.cpp

#pragma once
#include "Score.cpp"
class ScoreSocial : public Score {
private:
	double ce;
	double geography;
	double history;
public:
	ScoreSocial() {}
	ScoreSocial(double math, double literature, double english, double ce, double geography, double history) :
		Score(math, literature, english), ce(ce), geography(geography), history(history) {}
	double getCe()
	{
		return ce;
	}
	double getGeography()
	{
		return geography;
	}
	double getHistory()
	{
		return history;
	}
	double pointC()
	{
		return literature + history + geography;
	}
	double pointSocial()
	{
		return literature + history + geography;
	}
	double avgPoint()
	{
		return (literature + history + geography + math + literature + english) / 6;
	}

};
Reset
...