#include <iostream>
struct Car {
// 1. Поля структуры (символьные указатели const char*)
const char* brand; // Марка
const char* color; // Цвет
const char* bodyType; // Тип кузова
double engineVolume; // Объем двигателя (л)
int mileage; // Пробег (км)
// 2. Методы структуры
// Расчет среднего расхода топлива на 100 км
double calculateFuelConsumption(double distance) {
if (distance <= 0) return 0.0;
return (engineVolume / distance) * 100.0;
}
// Уменьшение пробега
void reduceMileage(int km) {
if (km > 0 && km <= mileage) {
mileage -= km;
}
}
// Вывод данных в консоль
void printInfo() const {
std::cout << "Марка: " << brand << "\n"
<< "Цвет: " << color << "\n"
<< "Тип кузова: " << bodyType << "\n"
<< "Объем двигателя: " << engineVolume << " л\n"
<< "Пробег: " << mileage << " км\n"
<< "-----------------------------------\n";
}
};
int main() {
// 3. Создание объектов
// Статический объект
Car staticCar = {"Toyota", "Черный", "Седан", 2.0, 150000};
std::cout << "=== Статический объект ===\n";
staticCar.printInfo();
std::cout << "Расход на 100 км (при дистанции 25 км): "
<< staticCar.calculateFuelConsumption(25) << " л\n";
staticCar.reduceMileage(5000);
std::cout << "Пробег после уменьшения: " << staticCar.mileage << " км\n\n";
// Динамический объект
Car* dynamicCar = new Car{"BMW", "Белый", "Внедорожник", 3.0, 80000};
std::cout << "=== Динамический объект ===\n";
dynamicCar->printInfo();
std::cout << "Расход на 100 км (при дистанции 30 км): "
<< dynamicCar->calculateFuelConsumption(30) << " л\n";
dynamicCar->reduceMileage(10000);
std::cout << "Пробег после уменьшения: " << dynamicCar->mileage << " км\n";
// Освобождение памяти
delete dynamicCar;
return 0;
}