0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25
1

Описать класс "вещь", описывающий габариты и вес предмета

09.09.2014, 12:42. Показов 2487. Ответов 21
Метки нет (Все метки)

Описать класс "вещь", описывающий габариты и все предмета.
Опишите класс "багаж" как совокупность вещей с операциями добавления элемента, удаление элемента, простор всех элементов и вычисление суммарного веса багажа.
Класс "вещь легко"
C++ (Qt)
1
2
3
4
5
6
7
class Thing// Класс Вещь
{
    public:
    int width, height, length, weight;
    char name;
        void input_Thing();
};
А вот с багажем никак не могу разобраться.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 12:42
Ответы с готовыми решениями:

Создать класс "Кот" с полями "Возраст" и "Вес"
Нужно сделать универсальный класс.Задание такое : Есть два кота (их может быть хоть 100) они...

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления"
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля:...

Описать класс "многочлен", реализовать методы "произведение многочленов", "сравнение на равенство"
описать класс "многочлен".реализовать методы "произведение многочленов", "сравнение на равенство",...

Описать базовый класс "Точка". Производные: "Окружность" и "Правильный треугольник"
Помогите, пожалуйста. Базовый класс «Точка». Классы «Окружность» и «Правильный треугольник»...

21
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 12:51 2
создай класс багаж, который в себе будет хранить список вещей (например, вектор). и добавь в него функции для работы с этим списком.

класс Багаж
{
паблик:
конструктор();
инт добавить(Вещь);
бул удалить(Вещь или name);
воид вывести();
инт посчитать_вес();
приват:
вектор вещи;
};
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 12:58 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
class Baggage
{
private:
    std::vector<Thing> things;
public:
    void addElement(Thing& thing)
    {
        things.push_back(thing);
    }
    void deleteLastElement()
    {
        things.pop_back();
    }
    void deleteElement(Thing& thing)
    {
        for (int i = 0; i < things.size(); ++i)
            if (things[i].name == thing.name) 
            {
                things.erase(things.begin() + i);
                break;
            }
    }
    int calculateWeight()
    {
        int sum = 0;
        for (int i = 0; i < things.size(); ++i)
        {
            sum += things[i].weight;
        }
        return sum;
    }
};
Добавлено через 5 минут
Цитата Сообщение от Михаил74 Посмотреть сообщение
простор всех элементов
Это что? Вывести имена элементов в багаже или как?
1
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 13:02 4
скорее всего просто
C++
1
2
3
4
deleteAll()
{
things.clear();
}
1
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 13:04 5
Лучший ответ Сообщение было отмечено Михаил74 как решение

Решение

Да пожалуйста.
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
class Baggage
{
private:
    std::vector<Thing> things;
public:
    void addElement(Thing& thing)
    {
        things.push_back(thing);
    }
    void deleteLastElement()
    {
        things.pop_back();
    }
    void deleteElement(Thing& thing)
    {
        for (int i = 0; i < things.size(); ++i)
            if (things[i].name == thing.name) 
            {
                things.erase(things.begin() + i);
                break;
            }
    }
    float calculateWeight()
    {
        float sum = 0;
        for (int i = 0; i < things.size(); ++i)
        {
            sum += things[i].weight;
        }
        return sum;
    }
    void showElements()
    {
        std::cout << "\nЭлементы в Вашем багаже: \n";
        for (int i = 0; i < things.size(); ++i)
        {
            std::cout << i << ")" << things[i].name;
            std::cout << std::endl;
        }
    }
    void deleteElements()
    {
        things.clear();
    }
 
};
1
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25
09.09.2014, 13:10  [ТС] 6
Спасибо большое=) Да это было слово "просмотр".
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 13:11 7
Цитата Сообщение от Михаил74 Посмотреть сообщение
Спасибо большое=) Да это было слово "просмотр".
Это там уже тоже есть.
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 13:26 8
кстати, в классе Thing name имеет тип char, что неправильно. либо char*, тогда надо несколько видоизменить код в части проверок на равенство, либо сделать std::string.
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 13:31 9
А лучше const char*. Дабы cout сразу видел строку.
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25
09.09.2014, 14:43  [ТС] 10
А если я делаю через stdio а не iostream. Как поступить?
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 15:33 11
C++
1
2
    std::string     name = "blabla";
    printf("str = %s", name.c_str());
Добавлено через 11 минут
а если для name использовать char*, то надо заморачиваться с выделением и освобождением памяти, если name вводится с клавиатуры, либо платить за это использованием массивов char с заведомо достаточным количеством байт для имени. также, если использовать char* везде где идет сравнение имен типа:
things[i].name == thing.name
надо использовать: (!strcmp(things[i].name, thing.name)), т.к. в противном случае сравниваются адреса строк в памяти.
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 15:59 12
Цитата Сообщение от mss307 Посмотреть сообщение
а если для name использовать char*, то надо заморачиваться с выделением и освобождением памяти, если name вводится с клавиатуры, либо платить за это использованием массивов char с заведомо достаточным количеством байт для имени. также, если использовать char* везде где идет сравнение имен типа:
things[i].name == thing.name
надо использовать: (!strcmp(things[i].name, thing.name)), т.к. в противном случае сравниваются адреса строк в памяти.
Я мало что поняла из этого потока слов. Если честно. Я не вижу абсолютно НИКАКИХ заморочек в использовании const char*.
Вот пример работы кода.
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
#include <iostream>
#include <vector>
 
class Thing// Класс Вещь
{
    public:
    float width, height, length, weight;
    const char* name;
        void input_Thing();
};
 
class Baggage
{
private:
    std::vector<Thing> things;
public:
    void addElement(Thing& thing)
    {
        things.push_back(thing);
    }
    void deleteLastElement()
    {
        things.pop_back();
    }
    void deleteElement(Thing& thing)
    {
        for (int i = 0; i < things.size(); ++i)
            if (things[i].name == thing.name) 
            {
                things.erase(things.begin() + i);
                break;
            }
    }
    float calculateWeight()
    {
        float sum = 0;
        for (int i = 0; i < things.size(); ++i)
        {
            sum += things[i].weight;
        }
        return sum;
    }
    void showElements()
    {
        std::cout << "\nЭлементы в Вашем багаже: \n";
        for (int i = 0; i < things.size(); ++i)
        {
            std::cout << i << ")" << things[i].name;
            std::cout << std::endl;
        }
    }
    void deleteElements()
    {
        things.clear();
    }
 
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    Baggage baggages;
    Thing pen;
    pen.name = "Ручка";
    pen.weight= 10.5;
    Thing towel;
    towel.name = "Полотенчиг";
    towel.weight = 50.4;
 
    baggages.addElement(pen);
    baggages.addElement(towel);
    std::cout << "\nВес = " << baggages.calculateWeight();
    baggages.showElements();
 
    system("pause>>null");
}
И никаких "заморочек" с каким-то там выделением памяти и тому подобными вещами.

Добавлено через 1 минуту
Фантастика, правда? И сравнение происходит гладенько.
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 16:18 13
я говорю о том, что если дополнительно создать в твоей программе объект
Thing pen2;
pen2.name = "Ручка";
pen2.weight= 10.5;
и не добавить его в список, но попробовать его удалить, то удаления pen не произойдет, хоть и все атрибуты у них совпадают внешне. То есть если сделать функцию delete, принимающую просто name, то сравнение не должно пройти гладко. а насчет памяти я погорячился, перегрелся)
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25
09.09.2014, 16:48  [ТС] 14
Мне нужно чтобы у меня из класса вещь данные переходили в класс багаж. Как это осуществить?
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 16:51 15
Поточней, пожалуйста, что значит "переходили"?
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 25
09.09.2014, 17:16  [ТС] 16
Грубо говоря вводом данных в классе Багаж. Должен быть ввод из класса вещь.
C++
1
2
3
4
5
6
void Thing::input_Thing()
{printf("Введите имя вещи\n");
scanf("%c", &name);
printf("Введите введите габариты и вес вещи\n");
scanf("%d %d %d %d ", &width, &height, &length, &weight);
}
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 17:29 17
можно такую функцию добавить в багаж, тогда вещь будет создаваться в методе багажа.
C++
1
2
3
4
5
void addElement(void)
    {
        Thing   thing;
        things.push_back(thing);
    }
Годится? я правильно понял суть?
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 17:41 18
Цитата Сообщение от mss307 Посмотреть сообщение
Годится? я правильно понял суть?
Нет. ТС хочет, чтобы была функция, при вызове которой пользователь смог не только добавить вещь, но и добавить ее параметры.
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
09.09.2014, 17:50 19
так в конструкторе Thing есть задание параметров. Или я опять что-то напутал..
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
09.09.2014, 17:58 20
Цитата Сообщение от mss307 Посмотреть сообщение
так в конструкторе Thing есть задание параметров. Или я опять что-то напутал..
Если функция где-то описана, то да, в конструкторе есть. Но ТС хочет, чтобы еще и в методе Багажа была такая возможность.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 17:58
Помогаю со студенческими работами здесь

Создайте класс, описывающий и реализующий класс-наследник класса "прямоугольник"
создайте класс описывающий и реализующий класс-наследник класса object геометрическую фигуру ...

Класс: Разработать класс, описывающий объект "Телефонный звонок"
Всем добрый вечер))) Пожалуйста помогите, очень прошу Разработать класс, описывающий объект...

Описать класс "Фигура" ("Шашка", "Дамка")
1. Класс “фигура”: координаты на шахматной доске, цвет. Метод – “ход” – в одном из двух...

Создать класс "Truck", описывающий автомобильный грузовой транспорт
Создать класс «Truck» описывающий автомобильный грузовой транспорт. Класс должен учитывать...

Написать класс "комната", описывающий комнату учебного корпуса
Господа , помогите разобраться с заданием Написать класс «комната», описывающий комнату учебного...

Разобрать класс, описывающий объект "Квартира"
Разобрать класс, описывающий объект &quot;Квартира&quot;. Класс &quot;Квартира&quot; имеет следующие поля: Адрес:...


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

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

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