Skip to content
Open

n #72

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(Cars)

set(SRC_LIST
Car.cpp
ElectricCar.cpp
ElectricEngine.cpp
HybridCar.cpp
Expand Down
15 changes: 15 additions & 0 deletions Car.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "Car.hpp"
#include <iostream>

Car::Car() {}
// Car::Car(Engine* engine)
// : engine_(engine)
// {
// std::cout << __FUNCTION__ << std::endl;
// }

//Car::~Car() { std::cout << __FUNCTION__ << std::endl; }
void Car::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void Car::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void Car::brake() { std::cout << __FUNCTION__ << std::endl; }
void Car::accelerate(int) { std::cout << __FUNCTION__ << std::endl; }
16 changes: 16 additions & 0 deletions Car.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#pragma once

class Car
{
public:
Car();
//~Car();
void turnLeft();
void turnRight();
void brake();
void accelerate(int speed);
virtual void refill() = 0;
virtual ~Car() {};
// virtual void charge() = 0;
// virtual void refuel() = 0;
};
12 changes: 7 additions & 5 deletions ElectricCar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ ElectricCar::ElectricCar(ElectricEngine* engine)
}

ElectricCar::~ElectricCar() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::brake() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::accelerate(int) { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::charge() { std::cout << __FUNCTION__ << std::endl; }

void ElectricCar::changeEngine(ElectricEngine* engine) {
delete engine_;
engine_ = engine;
}
void ElectricCar::refill() {
charge();
}
12 changes: 6 additions & 6 deletions ElectricCar.hpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
#pragma once
#include "ElectricEngine.hpp"
#include "Car.hpp"

class ElectricCar
class ElectricCar : virtual public Car
{
public:
ElectricCar(ElectricEngine* engine);
~ElectricCar();
void turnLeft();
void turnRight();
void brake();
void accelerate(int speed);
void changeEngine(ElectricEngine* engine);
void refill() override;
private:
void charge();

ElectricEngine* engine_;
};

4 changes: 2 additions & 2 deletions ElectricEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
#include <iostream>

ElectricEngine::ElectricEngine(int power, int batteryCapacity)
: power_(power)
, batteryCapacity_(batteryCapacity)
: power_(power),
batteryCapacity_(batteryCapacity)
{
std::cout << __FUNCTION__ << std::endl;
}
5 changes: 3 additions & 2 deletions ElectricEngine.hpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
#pragma once


class ElectricEngine
{
public:
ElectricEngine(int power, int batteryCapacity);

int power_; // in HP
private:
int power_; // in HP
int batteryCapacity_; // in Ah
};

14 changes: 6 additions & 8 deletions HybridCar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,16 @@
#include <iostream>

HybridCar::HybridCar(PetrolEngine* petrolEng, ElectricEngine* electricEng)
: petrolEngine_(petrolEng)
, electricEngine_(electricEng)
: ElectricCar(electricEng)
, PetrolCar(petrolEng)
{
std::cout << __FUNCTION__ << std::endl;
}

HybridCar::~HybridCar() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::brake() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::accelerate(int) { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::charge() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::refuel() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::refill() {
ElectricCar::refill();
PetrolCar::refill();
}


15 changes: 5 additions & 10 deletions HybridCar.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
#pragma once
#include "ElectricCar.hpp"
#include "ElectricEngine.hpp"
#include "PetrolCar.hpp"
#include "PetrolEngine.hpp"

class HybridCar
class HybridCar : public ElectricCar, public PetrolCar
{
public:
HybridCar(PetrolEngine* petrolEng, ElectricEngine* electricEng);
~HybridCar();
void turnLeft();
void turnRight();
void brake();
void accelerate(int speed);
void charge();
void refuel();

PetrolEngine* petrolEngine_;
ElectricEngine* electricEngine_;
void refill() override;
};

12 changes: 7 additions & 5 deletions PetrolCar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ PetrolCar::PetrolCar(PetrolEngine* engine)
}

PetrolCar::~PetrolCar() { std::cout << __FUNCTION__ << std::endl; }
void PetrolCar::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void PetrolCar::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void PetrolCar::brake() { std::cout << __FUNCTION__ << std::endl; }
void PetrolCar::accelerate(int) { std::cout << __FUNCTION__ << std::endl; }
void PetrolCar::refuel() { std::cout << __FUNCTION__ << std::endl; }

void PetrolCar::changeEngine(PetrolEngine* engine) {
delete engine_;
engine_ = engine;
}
void PetrolCar::refill() {
refuel();
}
13 changes: 7 additions & 6 deletions PetrolCar.hpp
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
#pragma once
#include "PetrolEngine.hpp"
#include "Car.hpp"

class PetrolCar
class PetrolCar : virtual public Car
{
public:
PetrolCar(PetrolEngine* engine);
~PetrolCar();
void turnLeft();
void turnRight();
void brake();
void accelerate(int speed);
void refuel();

void changeEngine(PetrolEngine* engine);
void refill() override;
private:
void refuel();
PetrolEngine* engine_;
};

1 change: 1 addition & 0 deletions PetrolEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ void PetrolEngine::changeGear(int gear)
currentGear_ = gear;
std::cout << __FUNCTION__ << std::endl;
}

2 changes: 1 addition & 1 deletion PetrolEngine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class PetrolEngine
public:
PetrolEngine(int power, float capacity, int gears);
void changeGear(int gear);

private:
int power_; // in HP
float capacity_; // in ccm
int gears_;
Expand Down
31 changes: 19 additions & 12 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -1,28 +1,35 @@
#include "PetrolCar.hpp"
#include "ElectricCar.hpp"
#include "HybridCar.hpp"
#include "Car.hpp"
#include <iostream>
#include <vector>

int main()
{
std::cout << std::endl << "OPEL" << std::endl;
PetrolCar opel(new PetrolEngine(120, 1800, 6));
opel.accelerate(50);
opel.brake();
opel.accelerate(-900);
opel.refuel();

Car* car = &opel;
car->accelerate(50);
car->brake();
car->accelerate(-900);
car->refill();


std::cout << std::endl << "NISSAN" << std::endl;
ElectricCar nissan(new ElectricEngine(130, 650));
nissan.charge();
nissan.accelerate(80);
nissan.engine_ = new ElectricEngine(150, 700); // Changing an engine during driving is not safe
nissan.turnLeft();
car = &nissan;
car->refill();
car->accelerate(80);
//nissan.engine_ = new ElectricEngine(150, 700); // Changing an engine during driving is not safe
//car->changeEngine(new ElectricEngine(150, 700));
car->turnLeft();

std::cout << std::endl << "TOYOTA" << std::endl;
HybridCar toyota(new PetrolEngine(80, 1400, 5), new ElectricEngine(100, 540));
toyota.accelerate(100);
toyota.brake();
toyota.charge();
toyota.refuel();
car = &toyota;
car->accelerate(100);
car->brake();
car->refill();
}