#include <iostream>
using namespace std;
class Engine{
private:
int power;
public:
Engine (int p=0){
power = p;
}
//встановленння значення
void setPower(int p){
power = p;
}
//отримання значення
int getPower(){
return power;
}
};
class Vehicle{
private:
Engine engine;
int maxSpeed;
public:
Vehicle (int power, int speed) : engine(power), maxSpeed(speed) {}
Vehicle (): engine (0), maxSpeed (0) {};
void setEnginePower(int p){
engine.setPower(p);
}
int getEnginePower(){
return engine.getPower();
}
void setMaxSpeed(int speed){
maxSpeed = speed;
}
int getMaxSpeed(){
return maxSpeed;
}
virtual string getType() { // визначення віртуальної функції
return "Unknown vehicle";
}
};
class Car: public Vehicle{
private:
int numberOfSeats;
public:
Car(int power, int speed, int seats): Vehicle(power,speed), numberOfSeats(seats) {}
void setNumberOfSeats(int seats){
numberOfSeats = seats;
}
int getNumberOfSeats(){
return numberOfSeats;
}
string getType() override{
return "Car";
}
void printInfo(){
cout << "Type:" << getType()<<endl;
cout << "EnginePower:" << getEnginePower()<<endl;
cout << "Max speed:" << getMaxSpeed()<<endl;
}
};
class Truck: public Vehicle{
private:
double cargoCapacity;
public:
Truck(int power, int speed, double cargoCapacity): Vehicle(power,speed), cargoCapacity(cargoCapacity) {}
void setCargoCapacity (double capacity){
cargoCapacity = capacity;
}
double getCargoCapacity(){
return cargoCapacity;
}
string getType() override{
return "Truck";
}
void printInfo(){
cout << "Type:" << getType()<<endl;
cout << "EnginePower:" << getEnginePower()<<endl;
cout << "Max speed:" << getMaxSpeed()<<endl;
cout << "Cargo capacity:" << getCargoCapacity()<<endl;
}
};
int main() {
Car mycar(300,200,2);
Truck mytruck(400,180, 12);
cout<<"Car Info" << endl;
mycar.printInfo();
cout<<"Trusk Info" << endl;
mytruck.printInfo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRW5naW5lewoJcHJpdmF0ZToKCWludCBwb3dlcjsKCXB1YmxpYzoKCUVuZ2luZSAoaW50IHA9MCl7CgkJcG93ZXIgPSBwOwoJfQoJLy/QstGB0YLQsNC90L7QstC70LXQvdC90L3RjyDQt9C90LDRh9C10L3QvdGPCgl2b2lkIHNldFBvd2VyKGludCBwKXsKCQlwb3dlciA9IHA7Cgl9CgkvL9C+0YLRgNC40LzQsNC90L3RjyDQt9C90LDRh9C10L3QvdGPCglpbnQgZ2V0UG93ZXIoKXsKCQlyZXR1cm4gcG93ZXI7Cgl9CgkKfTsKY2xhc3MgVmVoaWNsZXsKCXByaXZhdGU6CglFbmdpbmUgZW5naW5lOwoJaW50IG1heFNwZWVkOwoJcHVibGljOgoJVmVoaWNsZSAoaW50IHBvd2VyLCBpbnQgc3BlZWQpIDogZW5naW5lKHBvd2VyKSwgbWF4U3BlZWQoc3BlZWQpIHt9CglWZWhpY2xlICgpOiBlbmdpbmUgKDApLCBtYXhTcGVlZCAoMCkge307Cgl2b2lkIHNldEVuZ2luZVBvd2VyKGludCBwKXsKCQllbmdpbmUuc2V0UG93ZXIocCk7Cgl9CglpbnQgZ2V0RW5naW5lUG93ZXIoKXsKCQlyZXR1cm4gZW5naW5lLmdldFBvd2VyKCk7Cgl9Cgl2b2lkIHNldE1heFNwZWVkKGludCBzcGVlZCl7CgkJbWF4U3BlZWQgPSBzcGVlZDsKCX0KCWludCBnZXRNYXhTcGVlZCgpewoJCXJldHVybiBtYXhTcGVlZDsKCX0KCXZpcnR1YWwgc3RyaW5nIGdldFR5cGUoKSB7IC8vINCy0LjQt9C90LDRh9C10L3QvdGPINCy0ZbRgNGC0YPQsNC70YzQvdC+0Zcg0YTRg9C90LrRhtGW0ZcKICAgICAgICByZXR1cm4gIlVua25vd24gdmVoaWNsZSI7CiAgICB9Cn07CmNsYXNzIENhcjogcHVibGljIFZlaGljbGV7Cglwcml2YXRlOgoJaW50IG51bWJlck9mU2VhdHM7CglwdWJsaWM6CglDYXIoaW50IHBvd2VyLCBpbnQgc3BlZWQsIGludCBzZWF0cyk6IFZlaGljbGUocG93ZXIsc3BlZWQpLCBudW1iZXJPZlNlYXRzKHNlYXRzKSB7fQoJdm9pZCBzZXROdW1iZXJPZlNlYXRzKGludCBzZWF0cyl7CgkJbnVtYmVyT2ZTZWF0cyA9IHNlYXRzOwoJfSAKCWludCBnZXROdW1iZXJPZlNlYXRzKCl7CgkJcmV0dXJuIG51bWJlck9mU2VhdHM7Cgl9IAoJc3RyaW5nIGdldFR5cGUoKSBvdmVycmlkZXsKCQlyZXR1cm4gIkNhciI7Cgl9Cgl2b2lkIHByaW50SW5mbygpewoJY291dCA8PCAiVHlwZToiIDw8IGdldFR5cGUoKTw8ZW5kbDsKCWNvdXQgPDwgIkVuZ2luZVBvd2VyOiIgPDwgZ2V0RW5naW5lUG93ZXIoKTw8ZW5kbDsKCWNvdXQgPDwgIk1heCBzcGVlZDoiIDw8IGdldE1heFNwZWVkKCk8PGVuZGw7CgkKfQp9OwoKY2xhc3MgVHJ1Y2s6IHB1YmxpYyBWZWhpY2xlewoJcHJpdmF0ZToKCWRvdWJsZSBjYXJnb0NhcGFjaXR5OwoJcHVibGljOgoJVHJ1Y2soaW50IHBvd2VyLCBpbnQgc3BlZWQsIGRvdWJsZSBjYXJnb0NhcGFjaXR5KTogVmVoaWNsZShwb3dlcixzcGVlZCksIGNhcmdvQ2FwYWNpdHkoY2FyZ29DYXBhY2l0eSkge30KCXZvaWQgc2V0Q2FyZ29DYXBhY2l0eSAoZG91YmxlIGNhcGFjaXR5KXsKCWNhcmdvQ2FwYWNpdHkgPSBjYXBhY2l0eTsKCX0gCglkb3VibGUgZ2V0Q2FyZ29DYXBhY2l0eSgpewoJCXJldHVybiBjYXJnb0NhcGFjaXR5OwoJfSAKCXN0cmluZyBnZXRUeXBlKCkgb3ZlcnJpZGV7CgkJcmV0dXJuICJUcnVjayI7Cgl9Cgl2b2lkIHByaW50SW5mbygpewoJY291dCA8PCAiVHlwZToiIDw8IGdldFR5cGUoKTw8ZW5kbDsKCWNvdXQgPDwgIkVuZ2luZVBvd2VyOiIgPDwgZ2V0RW5naW5lUG93ZXIoKTw8ZW5kbDsKCWNvdXQgPDwgIk1heCBzcGVlZDoiIDw8IGdldE1heFNwZWVkKCk8PGVuZGw7Cgljb3V0IDw8ICJDYXJnbyBjYXBhY2l0eToiIDw8IGdldENhcmdvQ2FwYWNpdHkoKTw8ZW5kbDsKCX0KfTsKCgppbnQgbWFpbigpIHsKCUNhciBteWNhcigzMDAsMjAwLDIpOwoJVHJ1Y2sgbXl0cnVjayg0MDAsMTgwLCAxMik7Cgljb3V0PDwiQ2FyIEluZm8iIDw8IGVuZGw7CglteWNhci5wcmludEluZm8oKTsKCWNvdXQ8PCJUcnVzayBJbmZvIiA8PCBlbmRsOwoJbXl0cnVjay5wcmludEluZm8oKTsKCXJldHVybiAwOwp9