Bài tập

Bạn hãy tạo ra 3 lớp Food, CannedFood, NonCFood trong 3 file Food.cpp, CannedFood.cpp, NonCFood.cpp với thông tin như sau:

Giải thích: 

Lớp Food

  • name, price là các thuộc tính chỉ tên, giá của thực phẩm và có phạm vi truy cập là private.
  • Food() là phương thức tạo mạc định.
  • Food(name: string, price: 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.
  • Các phương thức còn lại là setter và getter.

Lớp CannedFood

  • Là lớp kế thừa lớp Food chứa thông tin của thực phẩm đóng hộp.
  • numberBox là thuộc tính chỉ số lượng hộp.
  • CannedFood() là phương thức khởi tạo mạc định.
  • CannedFood(name: string, price: double, numberBox: int) 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.
  • display() là phương thức hiển thị ra màn hình thông tin của đối tượng. Ví dụ nếu name = "Ca", price = 1500, numberBox = 10 thì khi gọi phương thức display() màn hình sẽ hiển thị ra:
    • Name: Ca
      Price: 1500
      Number box: 10
  • sortNumberBox(vt: vector<CannedFood>) là phương thức tĩnh sắp xếp vector vt theo thứ tự tăng dần của numberBox.
  • Các phương thức còn lại là settergetter.

Lớp NonCFood

  • Là lớp kế thừa lớp Food chứa thông tin của thực phẩm không đóng hộp.
  • weight là thuộc tính chỉ cân nặng của thực phẩm và có phạm vi truy cập là private.
  • NonCFood() là phương thức khởi tạo mạc định.
  • NonCFood(name: string, price: double, weight: 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.
  • display() là phương thức hiển thị ra màn hình thông tin của đối tượng. Ví dụ nếu name = "Ca", price = 1500, weight = 5 thì khi gọi phương thức display() màn hình sẽ hiển thị ra:
    • Name: Ca
      Price: 1500
      Weight: 5
  • sortWeight(vt: vector<NonCFood>) là phương thức tĩnh sắp xếp vector vt theo thứ tự tăng dần của weight.
  • Các phương thức còn lại là settergetter.

Hướng dẫn

File Food.cpp

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

class Food {
private:
	string name;
	double price;
public:
	Food(){}
	Food(string name, double price)
	{
		this->name = name;
		this->price = price;
	}
	void setName(string name)
	{
		this->name = name;
	}
	string getName()
	{
		return name;
	}
	void setPrice(double price)
	{
		this->price = price;
	}
	double getPrice()
	{
		return price;

	}

};

File CannedFood.cpp

#include "Food.cpp"
#include <vector>

class CannedFood : public Food {
private:
	int numberBox;
public:
	CannedFood(){}
	CannedFood(string name, double price, int numberBox):Food(name, price)
	{
		this->numberBox = numberBox;
	}
	int getNumberBox()
	{
		return numberBox;
	}
	void display()
	{
		cout << "Name: " << Food::getName() << endl;
		cout << "Price: " << Food::getPrice() << endl;
		cout << "Number box: " << this->numberBox << endl;
	}
	static void sortNumberBox(vector<CannedFood>& vt)
	{
		for (int i = 0; i < vt.size() - 1; i++)
		{
			for (int j = i + 1; j < vt.size(); j++)
			{
				if (vt[j].numberBox < vt[i].numberBox)
				{
					swap(vt[j], vt[i]);
				}
			}
		}
	}
};

File NonCFood.cpp

#include "Food.cpp"
#include <vector>
class NonCFood : public Food {
private:
	double weight;
public:
	NonCFood() {}
	NonCFood(string name, double price, double weight) :Food(name, price)
	{
		this->weight = weight;
	}
	void display()
	{
		cout << "Name: " << Food::getName() << endl;
		cout << "Price: " << Food::getPrice() << endl;
		cout << "Weight: " << this->weight << endl;
	}
	double getWeight()
	{
		return weight;
	}
	static void sortWeight(vector<NonCFood>& vt)
	{
		for (int i = 0; i < vt.size() - 1; i++)
		{
			for (int j = i + 1; j < vt.size(); j++)
			{
				if (vt[j].weight < vt[i].weight)
				{
					swap(vt[j], vt[i]);
				}
			}
		}
	}
};