Bài tập

Bạn hãy tạo 2 lớp Transport và Car với các thông tin như sau:

Giải thích:

Lớp Transport:

  • manufacturer, name, year, speed lần lượt là các thuộc tính chỉ hãng sản xuất, tên, năm và vận tốc tối ta của phương tiện giao thông có phạm vi truy cập private.
  • Transport() là phương thức khởi tạo không tham số.
  • Transport(manufacturer: string, name: string, year: int, speed: int) là phương thức khởi tạo 4 tham số.
  • display(): void là phương thức hiển thị thông tin ra màn hình của Transport. Ví dụ:  manufacturer = "Ford", name = "Car", year = 2020, speed = 400, sau khi gọi phương thức display() màn hình sẽ hiển thị thông tin như sau:
Manufacturer: Ford
Name: Car
Year Of Manufacturer: 2020
Speed: 400
  • Các phương thức còn lại là gettersetter.

Lớp Car:

  • Car là lớp kế thừa từ class Transport.
  • numberSeat, engineType lần lượt là thuộc tính chỉ số lượng chỗ ngồi, loại động cơ của Oto ở phạm vi truy cập private.
  • Car() là phương thức khởi tạo không tham số.
  • Car(manufacturer: string, name: string, year: int, speed:int, numberSeat: int, engineType: string) là phương thức khởi tạo 6 tham số.
  • getSpeedBasic(): double là phương thức trả về vận tốc cơ bản của oto được tính bằng speed/numberSeat.
  • display(): void là phương thức hiển thị thông tin của Oto ra màn hình. Ví dụ: manufacturer = "Viet Nam", name = "VinFast", year = 2021, speed = 300, numberSeat = 4, engineType = "diesel", sau khi gọi phương thức display() màn hình sẽ hiển thị:
  • Manufacturer: Viet Nam
    Name: VinFast
    Year Of Manufacturer: 2021
    Speed: 300
    Number Seat: 4
    Engine Type: diesel
    Speed Basic: 75
  • getCarHaveMaxSpeedBasic(vt: vector<Car>): static vector<Car> là phương thức tĩnh đầu vào là danh sách các Car và đầu ra trả về danh sách các CarSpeepBasic lớn nhất.
  • getCarHaveMaxSeat(vt: vector<Car>): static vector<Car> là phương thức tĩnh trả về danh sách các CarnumberSeat nhiều nhất.
  • Các phương thức còn lại là gettersetter.

Hướng dẫn

File Transport.cpp

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

class Transport {
private:
	string manufacturer;
	string name;
	int year;
	int speed;
public:
	Transport() {}
	Transport(string manufacturer, string name, int year, int speed) : manufacturer(manufacturer), name(name), year(year), speed(speed) {}
	string getManufacturer()
	{
		return manufacturer;
	}
	string getName()
	{
		return name;
	}
	int getYear()
	{
		return year;
	}
	int getSpeed()
	{
		return speed;
	}
	void display()
	{
		cout << "Manufacturer: " << manufacturer << endl;
		cout << "Name: " << name << endl;
		cout << "Year Of Manufacturer: " << year << endl;
		cout << "Speed: " << speed << endl;
	}
};

File Car.cpp

#include "Transport.cpp"
class Car : public Transport {
private:
	int numberSeat;
	string engineType;
public:
	Car() {}
	Car(string manufacturer, string name, int year, int speed, int numberSeat, string engineType) :
		Transport(manufacturer, name, year, speed), numberSeat(numberSeat), engineType(engineType) {}
	int getNumberSeat()
	{
		return numberSeat;
	}
	string getEngineType()
	{
		return engineType;
	}
	double getSpeedBasic()
	{
		return this->getSpeed() / numberSeat;
	}
	void display()
	{
		Transport::display();
		cout << "Number Seat: " << numberSeat << endl;
		cout << "Engine Type: " << engineType << endl;
		cout << "Speed Basic: " << getSpeedBasic() << endl;
	}
	static vector<Car> getCarHaveMaxSpeedBasic(vector<Car> vt)
	{
		vector<Car> v;
		double max = vt[0].getSpeedBasic();
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getSpeedBasic() > max)
			{
				max = vt[i].getSpeedBasic();
			}
		}
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getSpeedBasic() == max)
			{
				v.push_back(vt[i]);
			}
		}
		return v;
	}
	static vector<Car> getCarHaveMaxSeat(vector<Car> vt)
	{
		vector<Car> v;
		double max = vt[0].getNumberSeat();
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getNumberSeat() > max)
			{
				max = vt[i].getNumberSeat();
			}
		}
		for (int i = 0; i < vt.size(); i++)
		{
			if (vt[i].getNumberSeat() == max)
			{
				v.push_back(vt[i]);
			}
		}
		return v;
	}

};