C/C++

Как Создать иерархическую систему классов, на примере этого задания? Второй день уже туплю, помогите пожалуйста... С++

Создать иерархическую систему классов:
•базовым классом должен быть абстрактный класс «Жидкость» (СLiquid);
•производными классами должны стать классы «Спирт» (CAlcohol) и «Бензин» (CPetrol).
При этом:
•в базовом классе СLiquid должны быть заданы поля для названия и плотности.
•в производном классе CAlcohol должно быть задано поля для хранения крепости (основная характеристика жидкости);
•в производном классе CPetrol должно быть задано поля для хранения октанового числа (основная характеристика жидкости);
•все классы иерархии должны иметь следующие методы: методы получения значения и задания основной характеристики жидкости (два последних метода должны быть чисто виртуальными в базовом классе), а также метод для выведения на экран основных характеристик (данный метод должен быть чисто виртуальным).
Azamat Abikenov
Azamat Abikenov
127
10 минут всей работы)

#include <iostream>
#include <string>
using namespace std;
class СLiquid {
public:
virtual double characteristic()const = 0;
virtual void characteristic(double value) = 0;
virtual void show()const = 0;
protected:
string title;
double density;
};
class CAlcohol : virtual public СLiquid {
public:
CAlcohol(const string& title, const double density) {
this->title = title;
this->density = density;
}
double characteristic()const override { return volume; }
void characteristic(double value) override { volume = value; }
void show()const override {
cout << "Название: " << title << "\n - Плотность: " << density << " кг/л\n - Крепость: " << volume << "%\n";
}
private:
double volume;
};
class CPetrol : virtual public СLiquid {
public:
CPetrol(const string& title, const double density) {
this->title = title;
this->density = density;
}
double characteristic()const override { return rating; }
void characteristic(double value) override { rating = value; }
void show()const override {
cout << "Название: " << title << "\n - Плотность: " << density << " кг/л\n - Октанове число: " << rating << '\n';
}
private:
double rating;
};
int main() {
system("chcp 1251 > nul");
CAlcohol vodka("водка Русская", 0.953);
vodka.characteristic(40.0);
CPetrol petrol("бензин высокооктановый", 0.745);
petrol.characteristic(95);
vodka.show();
puts("");
petrol.show();
system("pause > nul");
}
Murad Sultanov
Murad Sultanov
79 811
Лучший ответ
Azamat Abikenov Спасибо большое, пойду разбираться
Как в любом туториале по наследованию:

https://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm

Если я правильно понял про чисто виртуальные методы...

class СLiquid{
СLiquid():m_density(0){}
virtual ~СLiquid(){}

virtual void SetName(const char* name){
m_name = name;
};

virtual const char* GetName(){
return m_name.c_str();
};

virtual void SetDensity(int v){
m_density = v;
}

virtual int GetDensity(){
return m_density;
}

virtual void SetStrength(int) = 0;
virtual int GetStrength() = 0;
virtual void PrintInfo() = 0;

protected:
std::string m_name;
int m_density;
};

class CAlcohol : public СLiquid{
int m_strength;
public:
CAlcohol():m_strength(0){}
virtual ~CAlcohol(){}
virtual void SetStrength(int v){
m_strength = v;
}
virtual int GetStrength(){
return m_strength;
}
virtual void PrintInfo(){
printf("Name:%s Density:%i Strength%i", m_name.c_srt(), m_density, m_strength);
}
};

другой класс сам напиши
Azamat Abikenov уже смотрел это, сложно по этому примеру делать
Женя Филин Просто надо заменить имена. Функции\методы так-же надо подправить. Всё то-же самое.

class СLiquid{
СLiquid(){}

};