Vamos desenvolver um sistema para gerenciar a cobrança de pedágio para diferentes tipos de veículos. A estrutura base fornecida é a classe abstrata Vehicle:
class Vehicle {
protected:
string NO; // número de identificação
public:
Vehicle(string n) { NO = n; }
virtual int fee() = 0; // calcula a taxa devida
};
A partir dessa classe, construiremos três classes derivadas: Car, Truck e Bus. As regras de cobrança são:
- Car: (quantidade de passageiros × 8) + (peso × 2)
- Truck: peso × 5
- Bus: quantidade de passageiros × 3
Implemente as classes e o programa principal. O programa lê o número de casos de teste e, para cada um, recebe o tipo do veículo (1 para Car, 2 para Truck, 3 para Bus), seu número de identificação e os dados específicos (para Car: passageiros e peso; para Truck: peso; para Bus: passaegiros). Todos os valores são inteiros.
Implementação das classes derivadas
class Car : public Vehicle {
private:
int passengers;
int weight;
public:
Car(string id, int p, int w) : Vehicle(id), passengers(p), weight(w) {}
int fee() override {
return passengers * 8 + weight * 2;
}
};
class Truck : public Vehicle {
private:
int weight;
public:
Truck(string id, int w) : Vehicle(id), weight(w) {}
int fee() override {
return weight * 5;
}
};
class Bus : public Vehicle {
private:
int passengers;
public:
Bus(string id, int p) : Vehicle(id), passengers(p) {}
int fee() override {
return passengers * 3;
}
};
Programa principle
#include <iostream>
#include <string>
using namespace std;
int main() {
int cases, type, weight, passengers;
string id;
cin >> cases;
for (int i = 0; i < cases; i++) {
cin >> type >> id;
switch (type) {
case 1:
cin >> passengers >> weight;
{
Car car(id, passengers, weight);
cout << id << " " << car.fee() << endl;
}
break;
case 2:
cin >> weight;
{
Truck truck(id, weight);
cout << id << " " << truck.fee() << endl;
}
break;
case 3:
cin >> passengers;
{
Bus bus(id, passengers);
cout << id << " " << bus.fee() << endl;
}
break;
default:
break;
}
}
return 0;
}
Exemplo de execução
Entrada:
4
1 002 20 5
3 009 30
2 003 50
1 010 17 6
Saída:
002 170
009 90
003 250
010 148