Skip to content
Closed
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
12 changes: 10 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.2)
cmake_minimum_required(VERSION 3.11.0)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(Cars)
Expand All @@ -15,6 +15,14 @@ set(SRC_LIST
Car.cpp
)

find_package(Catch2)

add_executable(${PROJECT_NAME} ${SRC_LIST})
target_compile_options(${PROJECT_NAME} PUBLIC -Wall -Wpedantic -Wextra)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR})

add_executable(${PROJECT_NAME}-ut test/Cars.ut.cpp )
target_compile_options(${PROJECT_NAME}-ut PRIVATE ${FLAGS})
target_compile_features(${PROJECT_NAME}-ut PRIVATE cxx_std_17)
#target_link_libraries(${PROJECT_NAME}-ut ${PROJECT_NAME}-lib Catch2::Catch2WithMain)
target_link_libraries(${PROJECT_NAME}-ut Catch2::Catch2WithMain)
17 changes: 17 additions & 0 deletions Cars.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "Cars.hpp"

void Cars::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void Cars::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void Cars::brake() { std::cout << __FUNCTION__ << std::endl; }
void Cars::accelerate(int speed)
{

if (speed >=0 && speed < 301)
{

std::cout << __FUNCTION__ << std::endl;
}
else{
throw InvalidAccelerate("Acc out of allowed range 0-300 "+std::to_string(speed));
}
}
27 changes: 27 additions & 0 deletions Cars.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once
#include <iostream>
#include <stdexcept>

class Cars
{
private:
/* data */
public:
Cars(/* args */){};
virtual ~Cars(){};
void turnLeft();
void turnRight();
void brake();
void accelerate(int speed);
virtual void refill()=0;
};


class InvalidAccelerate: public std::logic_error
{
public:
InvalidAccelerate(const std::string& message):std::logic_error(message){};

// Override what() function

};
19 changes: 11 additions & 8 deletions ElectricCar.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
#include "ElectricCar.hpp"
#include <iostream>

ElectricCar::ElectricCar(ElectricEngine* engine)
ElectricCar::ElectricCar(ElectricEngine *engine)
: engine_(engine)
{
std::cout << __FUNCTION__ << std::endl;
}

ElectricCar::~ElectricCar() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::charge() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::changeEngine(ElectricEngine* ee) {
ElectricCar::~ElectricCar()
{
delete engine_;
engine_ = ee;
std::cout << __FUNCTION__ << std::endl;
}
void ElectricCar::refill() {
charge();

void ElectricCar::charge() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::refill() { charge(); }
void ElectricCar::changeEngine(ElectricEngine *engine)
{
delete engine_;
engine_ = engine;
}
10 changes: 4 additions & 6 deletions ElectricCar.hpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
#pragma once
#include "Car.hpp"
#include "ElectricEngine.hpp"
#include "Cars.hpp"

class ElectricCar : public virtual Car
class ElectricCar : virtual public Cars
{
public:
ElectricCar(ElectricEngine* engine);
~ElectricCar();

void changeEngine(ElectricEngine* ee);
void charge();
void refill() override;

void changeEngine(ElectricEngine* engine);
private:
void charge();
ElectricEngine* engine_;
};
1 change: 1 addition & 0 deletions ElectricEngine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ class ElectricEngine
{
public:
ElectricEngine(int power, int batteryCapacity);


private:
int power_; // in HP
Expand Down
21 changes: 14 additions & 7 deletions HybridCar.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@

#include "HybridCar.hpp"
#include <iostream>

HybridCar::HybridCar(PetrolEngine* petrolEng, ElectricEngine* electricEng)
: ElectricCar(electricEng)
, PetrolCar(petrolEng)
,PetrolCar(petrolEng)

{
std::cout << __FUNCTION__ << std::endl;
}

HybridCar::~HybridCar() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::refill() {
ElectricCar::refill();
PetrolCar::refill();
}
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(){refuel();}

14 changes: 12 additions & 2 deletions HybridCar.hpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
#pragma once
#include "ElectricCar.hpp"
#include "ElectricEngine.hpp"
#include "PetrolCar.hpp"
#include "PetrolEngine.hpp"
#include <iostream>
#include "ElectricCar.hpp"
#include "PetrolCar.hpp"
//#include"Cars.hpp"

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

private:

};
Loading
Loading