Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Ази
0 / 0 / 0
Регистрация: 16.03.2014
Сообщений: 7
#1

Создать иерархию классов язык с++ - C++

16.03.2014, 21:10. Просмотров 1539. Ответов 8
Метки нет (Все метки)

Создать иерархию классов язык с++
Жидкость<-Напиток
Жидкость<-Топливо
Жидкость<-Реагент
Жидкость - абстрактный класс? инкапсулирует свойства цвет, название, температура замерзания/кипения и т.д., а также виртуальный метод Boil. Классы Напиток, Топливо, Реагент реализуют метод Boil(реализация на свое усмотрение)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 21:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать иерархию классов язык с++ (C++):

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы - C++
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы все фигуры, содержащие...

Создать иерархию классов датчик - C++
Создать иерархию классов датчик – абстрактный базовый класс и датчики температуры, влажности и скорости ветра. Для каждого класса...

Не получается создать иерархию классов - C++
Пытаюсь реализовать что-то вроде шаблонного метода: основная логика отрисовки лежит в базовом классе Shape (какие цвета берем, что...

Создать иерархию классов химических реакторов - C++
Помогите разобраться в задании: Создал базовый класс, определил в нем конструктор копирования, перегрузил оператор присваивания...

Создать иерархию классов представляющих простое наследование - C++
Ребята, необходимо решить 2 задачки. класс должен включать в себя : - компоненты данные - методы: а) конструктор по умолчанию; ...

Создать иерархию классов корабль – пассажирский пароход - C++
Доброго времени суток, нужна помощь. Создать класс двигатель, у которого есть фирма-производитель, тип, мощность. Определить функции...

8
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,591
17.03.2014, 09:43 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <string>
 
// базовый абстрактный класс жидкость
class Liquid
{
public:
    Liquid(): color() {}
    Liquid(const std::string &c): color(c) {}
    virtual ~Liquid() {} // базовый класс должен иметь вирт. деструктор
    virtual void boil() = 0; // чисто виртуальная функция
protected:
    std::string color;
    // some other
};
 
// наследнички
class Drink: public Liquid
{
public:
    // реализация чисто виртуального метода - класс больше не абстрактный
    void boil() { std::cout << "Drink::boil()\n"; }
};
 
class Fuel: public Liquid
{
public:
    void boil() { std::cout << "Fuel::boil()\n"; }
};
 
class Reagent: public Liquid
{
public:
    void boil() { std::cout << "Reagent::boil()\n"; }
};
 
int main()
{
   // Liquid l; // error - абстрактный класс не может иметь реализацию в виде объектов
   Liquid *p = new Reagent; // OK
   p->boil();               // Reagent::boil()
   Liquid *p2 = NULL;       // OK
   p2 = new Drink;          // OK
   p2->boil();              // Drink::boil()
   // освобождаем память
   delete p;
   delete p2;
}
1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
17.03.2014, 10:07 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
Создать иерархию классов 
Жидкость<-Напиток
Жидкость<-Топливо
Жидкость<-Реагент
Жидкость - абстрактный класс? инкапсулирует свойства цвет, название, температура замерзания/кипения и т.д., 
а также виртуальный метод Boil. Классы Напиток, Топливо, Реагент реализуют метод Boil(реализация на свое усмотрение)
*/
 
#include <iostream>
#include <string>
 
class Aqua {
private:
    std::string m_name;
    std::string m_color;
    double m_boiling_point;
    double m_freezing_point;
public:
    Aqua(const std::string & name, const std::string & color, double boiling, double freezing) : m_name(name), m_color(color), 
        m_boiling_point(boiling), m_freezing_point(freezing) {}
    std::string getName() const { return m_name; }
    std::string getColor() const { return m_color; }
    double getBoilingPoint() const { return m_boiling_point; }
    double getFreezingPoint() const { return m_freezing_point; }
    virtual std::string boil() const = 0;
    virtual ~Aqua() {}
};
 
class Drink : public Aqua {
public:
    Drink(const std::string & name, const std::string & color, double boiling, double freezing) : Aqua(name, color, boiling, freezing) {}
    virtual std::string boil() const { return "Many boubles..."; }
};
 
class Fuel : public Aqua {
public:
    Fuel(const std::string & name, const std::string & color, double boiling, double freezing) : Aqua(name, color, boiling, freezing) {}
    virtual std::string boil() const { return "CRUSH AND BURN!!!"; }
};
 
class Reagent : public Aqua {
public:
    Reagent(const std::string & name, const std::string & color, double boiling, double freezing) : Aqua(name, color, boiling, freezing) {}
    virtual std::string boil() const { return "So strange smell here..."; }
};
 
int main() {
    Aqua * examples[3];
    examples[0] = new Drink("Clear water", "Limpid", 100.0, 0.0);
    examples[1] = new Fuel("Gazoline", "Brown", 90.0, -30.0);
    examples[2] = new Reagent("Lakmus", "Green", 120.0, -10.0);
    
    for ( int i = 0; i < 3; ++i )
        std::cout << "Object #" << (i + 1) << "\nName: " << examples[i]->getName() << "\nColor: " << examples[i]->getColor()
            << "\nBoiling poing: " << examples[i]->getBoilingPoint() << "\nFreezing point: " << examples[i]->getFreezingPoint()
            << "\nWhen boil: " << examples[i]->boil() << std::endl;
    
    for ( int i = 0; i < 3; ++i )
        delete examples[i];
    
    return 0;
}
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.03.2014, 11:47 #4
По крайней мере
Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
double m_boiling_point; 
double m_freezing_point;
следует сделать константами. А метод boil(), имхо, не должен быть константным.
1
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
17.03.2014, 14:50 #5
Цитата Сообщение от Tulosba Посмотреть сообщение
следует сделать константами
В чём профит? Закрытые члены класса, сеттеров нет и не предвидится...
Цитата Сообщение от Tulosba Посмотреть сообщение
А метод boil(), имхо, не должен быть константным.
Менял бы какие-нибудь поля класса - был бы неконстантным.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.03.2014, 15:08 #6
Цитата Сообщение от easybudda Посмотреть сообщение
В чём профит? Закрытые члены класса, сеттеров нет и не предвидится...
Во-первых, лучше отражает состояние реального мира.
Во-вторых, базовый класс всё же не застрахован от изменения. А следовательно, может быть добавлена функция, которая будет менять то, что не должно быть изменчивым по своей природе (температура кипения в частности (если конечно не будет менять давление) ).
В-третьих, (не уверен) дополнительные возможности оптимизации для компилятора.
Цитата Сообщение от easybudda Посмотреть сообщение
Менял бы какие-нибудь поля класса - был бы неконстантным.
В данном (частном) случае безусловно имеет место быть const (из-за ограниченного набора полей в классе), однако, если возвращаться к упомянутому мной п.1, то кипение изменяет агрегатное состояние вещества (по сути, жидкость уже становится паром), которое вполне может быть добавлено как поле в дочерний класс (или даже в базовый), а вот перегрузить const функцию ее не-const версией уже не получится. Придется обходить ситуацию через mutable например.
0
easybudda
17.03.2014, 15:14
  #7

Не по теме:

Tulosba, при вашем подходе класс "ЯичнаяСкорлупа" можно до глубокой старости писать, и всё время чуть-чуть не комильфо будет. Для учебного примера тут и так много неочевидного.

0
Tulosba
17.03.2014, 15:19
  #8

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
при вашем подходе
Просто странно было видеть наличие const там где не надо, и его отсутствие там где оно по всей логике должно быть.

0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
17.03.2014, 15:47 #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Просто странно было видеть наличие const там где не надо, и его отсутствие там где оно по всей логике должно быть.
Логика бывает разная. К примеру, если функция boil() задумана, как чисто информативная, выдающая строку с описанием процесса кипения, то переделка её под другие цели в классах наследниках - уже не здоровая идея. С другой стороны температура кипения действительно может изменяться в зависимости от внешних условий и тогда костылей понадобится гораздо больше. Так, что, какое задание, такое и решение.
0
17.03.2014, 15:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2014, 15:47
Привет! Вот еще темы с ответами:

Создать иерархию классов: Треугольник, Прямоугольный, Равнобедренный и Равносторонний - C++
Помогите с задачей пожалуйста !!! Даже не знаю с чего начать ( Создать иерархию классов Треугольник, прямоугольный, равнобедренный...

Создать иерархию классов для работы с комплексными числами - C++
Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними:...

Создать иерархию из трех классов для решения системы 2 уравнений с 2 неизвестными - C++
Класс 1 a1,b1,c1,a2,b2,c2,-вещественные Общий метод VVOD Класс 2 Общие поля: det,detx,dety,x,y Общий метод Сalc() Класс...

Создать иерархию классов для моделирования взаимодействия “Магазин-склад- Заказчик” - C++
Для проверки функционирования созданных классов написать программу, использующую эти классы. В программе должны быть продемонстрированы все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru