Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
#1

ООП Классы - C++

02.12.2010, 14:53. Просмотров 618. Ответов 4
Метки нет (Все метки)

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
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
#include <sstream>
#include <limits>
 
using namespace std;
 
struct backPackItem {
    string name;
    int cost;
    int mass;
};
 
void main() {
    setlocale(LC_ALL,"Russian");
    const int counter = 2; //количество предметов в рюкзаке
    const int criticalMass = 100; //максимальный вес в рюкзаке
    //выбираем элементы, которые могут наполнять рюкзак.
    vector<backPackItem> backPackItems;     
    for (int i = 0; i < counter; i++) {
        backPackItem newItem;
        cout << endl << "Введите название предмета: ";
        cin >> newItem.name;
        cout << "Введите массу предмета: " << endl;
        cin >> newItem.mass;
        cout << endl << "Введите стоимость предмета: ";
        cin >> newItem.cost;
        cout << endl << endl;
        backPackItems.push_back(newItem);
    }
        //сортируем элементы по стоимости   
    for(int i = counter - 1; i >= 0; i--) {
        int maxIndex = 0;
        for(int j = 0; j <= i; j++)
            if(backPackItems[j].cost > backPackItems[maxIndex].cost)
                maxIndex = j;
        if(maxIndex != i) {
            backPackItem temp = backPackItems[maxIndex];
            backPackItems[maxIndex] = backPackItems[i];
            backPackItems[i] = temp;
        }
    }
    //наполняем рюкзак
    vector<backPackItem> myBackPack;      
    int massInBackPack = 0;
    int costInBackPack = 0;
    for (int i = 0; i < backPackItems.size(); i++) {
        if(massInBackPack + backPackItems[i].mass <= criticalMass) {
            massInBackPack += backPackItems[i].mass;
            costInBackPack += backPackItems[i].cost;
            myBackPack.push_back(backPackItems[i]);
        }                       
    }
    //выводим результаты
    cout << "-----------------------------------------------------" << endl;
    cout << "В рюкзаке находится " << myBackPack.size()
         << " предметов, с общей массой в " << massInBackPack
         << " кг. и суммарной стоимостью в " << costInBackPack<<endl;
    cout << "-----------------------------------------------------" << endl;
    cout << "В рюкзаке находятся предметы: " << endl;   
    for (int i = 0; i < myBackPack.size(); i++) {
        cout << myBackPack[i].name << "\t" << myBackPack[i].mass << "\t" << myBackPack[i].cost << endl;
    }
    system("pause");
}
как данный код переписать на классы, что бы там были асессоры(set) и мутаторы(get).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2010, 14:53     ООП Классы
Посмотрите здесь:

Начало ООП. Классы - C++
Здравствуйте.Читал про ссылки массивов на указатели, и указателей на массивы.Не могу понять как в этой программе как функции ссылаются на...

Классы и объекты в ооп и с++ - C++
Что такое классы и объекты в ооп и с++?

ООП. Классы, наследование, векторы - C++
Никак не пойму как реализовать наследование допустим есть базовый класс животных там различные функции class Beast { public: ...

задание по ООП, классы, матрицы - C++
Составить описание класса, обеспечивающего представление матрицы произвольного размера с возможностью изменением кол-ва строк и столбцов,...

VS2012 классы, заголовочные файлы, ООП - C++
Написал хорошую программу, но всё в одном файле main.cpp. У меня есть около 12 классов, много наследования, std::vector-ов, и т.д. ...

В чем моя ошибка?(ООП, классы) - C++
Что изменить в файле functionss.h? Заранее спасибо!!! Задание: Определить класс «матрица». В класс включить два конструктора: 1)...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
02.12.2010, 16:46     ООП Классы #2
Наоборот, accessor - get, mutator - set.

Акцессоры и мутаторы это всего лишь методы класса, возвращающие или устанавливающие некие значения объекта.
Не уверен в правильности твоего решения задачи рюкзака, но копать некогда.

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
98
99
100
101
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
#include <sstream>
#include <limits>
#include <algorithm>
 
using namespace std;
 
class BackPackItem
{
private:
    string name;
    int cost;
    int mass;
public:
    BackPackItem(string name, int cost, int mass)
    {
        this->name = name;
        this->cost = cost;
        this->mass = mass;
    }
    string GetName() { return name; }
    string SetName(string new_name) { name = new_name; }
    int GetCost() { return cost; }
    int SetCost(int new_cost) { cost = new_cost; }
    int GetMass() { return mass; }
    int SetMass(int new_mass) { mass = new_mass; }
};
 
bool is_backpack_item_less_by_cost(BackPackItem &a, BackPackItem &b) { return a.GetCost() < b.GetCost(); }
 
class BackPack
{
private:
    vector<BackPackItem> backpack;
    vector<BackPackItem> item_list;
    int max_items;
    int max_mass;
    int massInBackPack;
    int costInBackPack;
public:
    int GetMaxItems() { return max_items; }
    void SetMaxItems(int new_max_items) { max_items = new_max_items; }
    int GetMaxMass() { return max_mass; }
    void SetMaxMass(int new_max_mass) { max_mass = new_max_mass; }
    int GetMassInBackPack() { return massInBackPack; };
    int GetCostInBackPack() { return costInBackPack; };
 
    BackPack(int max_items, int max_mass) 
    {
        this->max_items = max_items;
        this->max_mass=max_mass; 
    };
 
    void AddBackPackItem(const BackPackItem item)
    {
        item_list.push_back(item);
    };
 
    void Pack()
    {
        backpack.clear();
        sort(item_list.begin(), item_list.end(), is_backpack_item_less_by_cost);
        massInBackPack = 0;
        costInBackPack = 0;
        for (vector<BackPackItem>::iterator i=item_list.begin(); i!=item_list.end(); i++)
            if (massInBackPack + i->GetMass() <= max_mass)
            {
                massInBackPack += i->GetMass();
                costInBackPack += i->GetCost();
                backpack.push_back(*i);
            }
    }
 
    int BackPackCount() { return backpack.size(); }
    BackPackItem GetPackPackItem(int n)
    {
        return backpack[n];
    }
};
 
int main()
{
    BackPack backpack(5, 100);
    for (int i=0; i<20; i++)
    {
        backpack.AddBackPackItem(BackPackItem("<no_name>", 10+rand()%10, 20+rand()%10));
    }
 
    backpack.Pack();
    for (int i=0; i<backpack.BackPackCount(); i++)
    {
        BackPackItem item = backpack.GetPackPackItem(i);
        cout << item.GetName() << " " << item.GetCost() << "r " << item.GetMass() << "kg" << std::endl;
    }
    cout << "Total cost: " << backpack.GetCostInBackPack() << "r, total weight: " << backpack.GetMassInBackPack() << "kg." << std::endl;
 
    system("pause");
}
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
02.12.2010, 16:51  [ТС]     ООП Классы #3
lemegeton, а где именно я допустил ошибки? И если не сложно прокомментируй свой код полностью пожалуйста.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
02.12.2010, 16:59     ООП Классы #4
Да какие там комментарии?! Переделал структуру в класс, добавил класс в котором куча функций, заменяющих прямой доступ к полям класса, да заменил сортировку на STL'овскую. Алгоритм оставил тот же. В main() пример использования.
Даже не уверен, имелась ли в виду
задача о ранце, но если имелась, алгоритм определенно неверный. По ссылке есть даже готовая реализация на С++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2010, 17:11     ООП Классы
Еще ссылки по теме:

ООП Классы Двумерный динамичесский массив не получается - C++
Задание: Описать класс для решения задачи. В классе предвидеть: 1. Дополнительный конструктор 2. Метод автоматической инициализации...

ООП Классы. Выделение памяти под строку char* - C++
Делал программу на освоение классов и тд. и наткнулся на такую вот штуку.При вводе с клавиатуры переменной Name типа char* программа...

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

ООП. Классы. Член-функция стирает предидущее значение. Есть идеи? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class Client{ private: char* Name; char* Adress; float...

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

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


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

Или воспользуйтесь поиском по форуму:
Temirlan90
132 / 132 / 8
Регистрация: 30.09.2010
Сообщений: 333
02.12.2010, 17:11  [ТС]     ООП Классы #5
lemegeton, да я на твой код смотрю и не понимаю впритык=), оставь комментарии очень прошу, хочу понять смысл работы программа в ООП.
Yandex
Объявления
02.12.2010, 17:11     ООП Классы
Ответ Создать тему
Опции темы

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