Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 17
1

Создать класс "Стакан" с виртуальной функцией "Объем"

28.06.2016, 16:34. Показов 1355. Ответов 12
Метки нет (Все метки)

Создать класс с виртуальной функцией - Объем стаканов (3). Реализовать в программе вывод (заполнение стаканов жидкостью),доливание,переливание с одного в другой, а так же с 2-х стаканов в 3-й,слив жидкости из стаканов. Спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2016, 16:34
Ответы с готовыми решениями:

Создать абстрактный базовый класс "Фигура" с виртуальной функцией: "Площадь"
Создать абстрактный базовый класс фигура с виртуальной функцией — площадь. Создать производные...

Абстрактный базовый класс "звонок" с виртуальной функцией "стоимость"
Помогите пожалуйста очень надо (классы это не мое) полиморфизм Поступающие звонки оператор...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об...

12
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
28.06.2016, 18:25 2
Лучший ответ Сообщение было отмечено RomeoJamper как решение

Решение

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
64
65
66
67
68
69
70
71
72
73
74
75
#include<iostream>
#include<conio.h>
#include <cstdio>
using namespace std;
 
class Capacity
{
public:
    explicit Capacity(float capacity = 0, float maxcapacity = 0) : _capacity(capacity), _maxCapacity(maxcapacity) {}; //explicit для защиты, препод старый все равно не знает
    virtual float getCapacity() { return _capacity; }          //получить объем
    virtual void add(float capacity);                          //добавить или отлить в зависимости от знака
    virtual void add(Capacity &destination,float addcapacity); //перелить в destination некоторый объем
    ~Capacity() {};
protected:
    float _capacity;          //текущий объём
    const float _maxCapacity; //максимальный объём (можно перечислением)
 
};
 
class Glass : public Capacity //стакан
{
public:
    explicit Glass(float capacity, float rad, float height) :Capacity(capacity, 100.5), _rad(rad), _height(height) {};
private:
    float _rad;
    float _height;
};
 
void Capacity::add(float capacity)
{
    float maxdelta;
    float delta;
    if (capacity > 0) //доливаем
        delta = (_capacity + capacity) > _maxCapacity ? _maxCapacity - _capacity : capacity;
    else              //выливаем
        delta = (_capacity + capacity) > 0 ? capacity : _capacity;    
    
    _capacity += delta;
}
 
void Capacity::add(Capacity &destin, float capacity)
{
    float old_capacity = destin.getCapacity();
    destin.add(capacity);
    float new_capacity = destin.getCapacity();
    //если объемы различны, значит оно перелилось
    if (old_capacity != new_capacity)
        this->add(-capacity);
 
}
 
ostream& operator<<(ostream &os, Glass &obj)
{
    os << "Glass with capacity:" << obj.getCapacity();
    return os;
}
 
int main()
{
    Glass MyGlass(10,1,1);
    cout << MyGlass << endl;
    MyGlass.add(+50.0);
    cout << MyGlass << endl;
    MyGlass.add(-51.0);
    cout << MyGlass << endl;
 
    Glass BigGlass(0, 2, 2);
 
    MyGlass.add(BigGlass, 5);
 
    cout << MyGlass << endl;
    cout << BigGlass << endl;
 
    _getch();
}
2
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 17
28.06.2016, 19:40  [ТС] 3
Отлично, спасибо большое))
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
28.06.2016, 21:05 4
там тока один комментарий...осторожней...
0
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 17
29.06.2016, 04:02  [ТС] 5
Отредактирую. А как можно организовать тут ввод данных (указывать объем в самой программе)?
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
29.06.2016, 10:36 6
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include<iostream>
#include<conio.h>
#include <cstdio>
using namespace std;
 
class Capacity
{
public:
    Capacity(float capacity, float maxcapacity) : _capacity(capacity), _maxCapacity(maxcapacity) {}; //конструктор
    Capacity() { InputCapacity(); };
    virtual float getCapacity() const { return _capacity; }        //получить объемы
    virtual float getMaxCapacity() const { return _maxCapacity; }
    virtual void add(float capacity);                          //добавить или отлить в зависимости от знака
    virtual void add(Capacity &destination,float addcapacity); //перелить в destination некоторый объем
    void InputCapacity();
    ~Capacity() {};
protected:
    float _capacity;          //текущий объём
    float _maxCapacity;       //максимальный объём (можно перечислением)
 
};
 
void Capacity::InputCapacity()
{
    float capacity,maxcapacity;
    cout << "Input capacity and max capacity for new Glass:\n";
    if (cin >> capacity >> maxcapacity)
    {
        this->_capacity = capacity;
        this->_maxCapacity = maxcapacity;
    }
    else
        cout << "Glass not create.";
}
 
class Glass : public Capacity //стакан
{
public:
    Glass(float capacity, float rad, float height) :Capacity(capacity, 100.0), _rad(rad), _height(height) {};
    Glass(float rad, float height) : Capacity(), _rad(rad), _height(height) {};
private:
    float _rad;
    float _height;
};
 
void Capacity::add(float capacity)
{
    float delta;
    if (capacity > 0) //доливаем
        delta = (_capacity + capacity) > _maxCapacity ? _maxCapacity - _capacity : capacity;
    else              //выливаем
        delta = (_capacity + capacity) >= 0 ? capacity : _capacity;    
    
    _capacity += delta;
}
 
void Capacity::add(Capacity &destin, float capacity)
{
    if (capacity > (this->getCapacity()))
    {
        cout << "capacity is to low...\n";
        return;
    }
 
    float old_capacity = destin.getCapacity();
    destin.add(capacity);
    float new_capacity = destin.getCapacity();
    //если объемы различны, значит оно перелилось
    if (old_capacity != new_capacity)
        this->add(-capacity);
 
}
 
ostream& operator<<(ostream &os, Glass &obj)
{
    os << "Glass with capacity/max capacity:" << obj.getCapacity()<<"/"<<obj.getMaxCapacity();
    return os;
}
 
int main()
{
    Glass MyGlass(1,1);
    cout << MyGlass << endl;
    MyGlass.add(+50.0);
    cout << MyGlass << endl;
    MyGlass.add(-51.0);
    cout << MyGlass << endl;
 
    Glass BigGlass(2,2);
 
    MyGlass.add(BigGlass, 5.0);
 
    cout << MyGlass << endl;
    cout << BigGlass << endl;
 
    _getch();
}
1
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 17
29.06.2016, 12:09  [ТС] 7
main так и оставить?? программа не запрашивает ввод. Помоги ещё раз нубу с экзаменом,спасибо
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
29.06.2016, 12:24 8
main так и оставить
полностью код новый бери. там стаканы создаются с вводом объёма и максимального объёма
0
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 17
29.06.2016, 12:37  [ТС] 9
Упс, визуалка залагала,сори. всё работает, только немного нужно подшаманить с выводом) спасибо!!!)

Добавлено через 13 минут
А можно на эти операции сделать ввод??? MyGlass.add(+50.0); MyGlass.add(-51.0); MyGlass.add(BigGlass, 5.0); для того чтобы можно было указывать самому сколько нужно долить перелить и т.д.
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
29.06.2016, 13:14 10
Ага, один параметр убираешь и берешь его из cout. Аналогично попробуй сделать.
1
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 17
29.06.2016, 19:27  [ТС] 11
nofx, Огромное спасибо Вам!! От этого задания зависило очень многое, Вы очень помогли! Благодарю ещё раз
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
29.06.2016, 21:28 12
nofx, а можете объяснить зачем тут explicit более конкретно?

Добавлено через 4 минуты
И вот это, что за функция без типа?
C++ (Qt)
1
2
3
4
5
ostream& operator<<(ostream &os, Glass &obj)
{
    os << "Glass with capacity:" << obj.getCapacity();
    return os;
}
0
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
30.06.2016, 07:48 13
1. explicit там не нужен,уж в этой задаче и подавно. Был написан для "препода" - чтобы покорить его новым словом!
(видимо это удалось)

2. это оператор. в С++ можно перегружать операторы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2016, 07:48

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс...

Создать класс комплексных чисел и ввести операции: "+", "-", "*", "/".
пожалуйста-помогите написатьпрограмму!!! сижу на экзамене!!! вот само задание: создать класс...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Базовый класс "Изделие" и производные классы "Мышь", "Клавиатура", "Монитор"
/*Создать класс изделие, с полями себестоимость, цена, время выполнения, стоимость нормочаса и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru