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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
SubaevaLF
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 6
#1

работа с классами(как перебрать все объекты класса) - C++

27.04.2011, 23:09. Просмотров 2042. Ответов 10
Метки нет (Все метки)

Здравствуйте! Я начинающий программист..... может и не программист вовсе. Но мне необходимо сделать такую задачу. С классами начала работать буквально вчера, когда возникла необходимость сделать задачку. Сама задачка такая. "Описать и реализовать класс Bill, представляющий собой разовый платеж за телефонный разговор. Класс должен включать в себя поля номера телефона, тарифа за минуту разговора, скидки (в процентах), времени разговора (в минутах), и суммы к оплате.
Продемонстрировать создание, инициализацию и обработку массива объектов типа Bill."
Вообще плохо представляю как все это должно выглядеть, сделала вот такую вещь.
h файл.
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
#include <iostream>
using namespace std;
class Bill{
public:
    Bill();
    void getNumber(int);
    void getRate(int);
    void getDiscount(int);
    void getMinute(int);
    void setSumm();
    void sortirovka();
private:
int number;//номер тел
int rate; //тариф
int discount;//скидка
int minute;//время разговора
int summ; //сумма к оплате
};
Bill::Bill(){}
void Bill::getNumber(int number1){
        //cout<<number;
    number=number1;
}
void Bill::getRate(int rate1){
        //cout<<rate;
    rate=rate1;
}
void Bill::getDiscount(int discount1){
    //cout<<discount;
    discount=discount1;
}
void Bill::getMinute(int minute1){
        //cout<<minute
    minute=minute1;
}
void Bill::setSumm(){
    cout<<endl;
    cout<<"Nomer telefona"<<number<<endl;
cout<<"Tarif="<<rate<<"rub/min"<<endl<<"Vremya razgovora="<<minute<<endl<<"Skidka="<<discount<<endl;
    summ=rate*minute-(rate*minute*discount/100);
    cout<<"Summa k oplate="<<summ<<endl;
}
 
cpp файл 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
#include "Bill1.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    Bill chet1;
    chet1.getNumber(2343234);
    chet1.getRate(2);
    chet1.getDiscount(20);
    chet1.getMinute(13);
    chet1.setSumm();
 
    Bill chet2;
chet2.getNumber(757575);
    chet2.getRate(10);
    chet2.getDiscount(13);
    chet2.getMinute(4);
    chet2.setSumm();
 
    
getch();
    return 0;
}
Хотелось бы узнать вообще то ли я делаю.... И сам вопрос такой. Как можно пробежаться по всем обектам класса, что бы их сравнить. Допустим чтобы сделать сортировку (просто ничего другого в голову не приходит когда читаю задание "обработку массива объектов типа Bill."). И как можно узнать количество этих самых объектов в классе, что бы сделать цикл.
Спасибо. Не судите строго, вообще во всем этом оч плохо разбираюсь.... Очень надеюсь на Вашу помощь...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2011, 23:09     работа с классами(как перебрать все объекты класса)
Посмотрите здесь:

C++ Как в цикле перебрать все элементы отдельного столбца или строки?
C++ Знакомство с классами, попытка реализации класса матриц
Задача с классами. Программа с использованием класса Employee C++
C++ Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты?
Массивы указателей на объекты как данные класса C++
C++ Работа с классами (в главном классе создать указатель на экземпляр другого класса)
C++ Работа с классами: массив объектов класса Complex
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
28.04.2011, 07:51     работа с классами(как перебрать все объекты класса) #2
Буду занудой: get - дай, set - установить (т.е. вместо сетов - гет, вместо гетов - сет.)
====================
обработку массива объектов типа Bill.
посчитать суммарное начисление по всем платежам, вывести список абонентов тарифа "безлимитный", вывести все платежи абонента +7(314)159-26-53 и т.п.

сортировка - внешняя функция по отношению к Bill. (не метод класса), вывод на экран в - данном контексте - скорее всего тоже.

Как можно пробежаться по всем обектам класса, что бы их сравнить
понять, что значит сравнить два счета. То есть:
счет1:Иванов, 100 рублей
счет2:Петров, 100 рублей
счет3:Иванов, 200 рублей.
Какие из этих счетов равны между собой?? Или они не равны вовсе?.

Как можно пробежаться по всем обектам класса...
зависит от того, как вы эти объеты организуете. (вернее, когда вы их организуете - сразу станет понятно)
И как можно узнать количество этих самых объектов в классе
вопрос не корректен.
========================

как организовать массив:
для препода:
C++
1
 Bill my_array[size];
для себя любимой (правильно и удобно):
C++
1
std::vector<Bill>my_array(size)
В любом случае начните с исправления этого:
Вообще плохо представляю как все это должно выглядеть, сделала вот такую вещь.
SubaevaLF
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 6
28.04.2011, 21:10  [ТС]     работа с классами(как перебрать все объекты класса) #3
Спасибо. Как начать исправлять последнее..... я даже не знаю(((((
Допустим как сделать-то цикл что бы например вывести всех абонентов безлимитный???? как просмотреть все объекты класса?? Или это совсем по другому делается???
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.04.2011, 21:14     работа с классами(как перебрать все объекты класса) #4
Цитата Сообщение от SubaevaLF Посмотреть сообщение
Допустим как сделать-то цикл что бы например вывести всех абонентов безлимитный???? как просмотреть все объекты класса?? Или это совсем по другому делается???
Вам необходимо создать массив объектов класса Bill. А потом пройтись по массиву.
C++
1
2
3
4
5
6
Bill bills[size];
for (int i = 0; i < size; ++i) {
     if (bills[0].getRate() == UNLIM) {
           // вывести то, что требуется
     }
}
SubaevaLF
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 6
28.04.2011, 21:43  [ТС]     работа с классами(как перебрать все объекты класса) #5
Спасибо. не сочтите уж за тупость, я просто реально не знаю. А откуда взять значение для size? Это самим написать? по количеству созданных объектов? или есть какой-нить метод кот нам ето выдает?
Фуф.... совсем сложно мне со всем этим разбираться...)
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.04.2011, 21:47     работа с классами(как перебрать все объекты класса) #6
Цитата Сообщение от SubaevaLF Посмотреть сообщение
А откуда взять значение для size? Это самим написать?
Самим, конечно самим. И значение должно быть константой.
C++
1
const int size = 20;
Количество объектов не должно быть больше этой переменной само собой
SubaevaLF
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 6
28.04.2011, 22:19  [ТС]     работа с классами(как перебрать все объекты класса) #7
Спасибо))))
C++
1
2
3
4
5
6
7
void Bill::summAllBill(){
Bill bills[2];
for (int i = 0; i <= 2; ++i) {
     if (bills[0].getRate() == UNLIM) {
         cout<<chet1.summ+chet2.summ; // 
     }  
}[CPP]
[/CPP]

cout<<chet1.summ+chet2.summ; // как сделать вот такое действие. То есть сложить summ у всех объектов??? возможно еще так низя делать так как summ в приват??? или это не влияет?? И еще как сделать эту функцию отдельной от класса Bill? но что бы можно было оперировать именно объектами данного класса??? надеюсь я понятно написала....
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
29.04.2011, 00:35     работа с классами(как перебрать все объекты класса) #8
Запись вида obj1+obj2 подразумевает, что вы каким-то образом объединяете два объекта в один новый obj3. Коротко - можно, но не нужно.

Вы считаете сумму всех "оплат" по безлимитным абонентам, следовательно, вам нужно просто перебрать массив bill-ов складывая значения соответствующих полей в случае, если тариф "безлимитный":
C++
1
2
3
4
5
6
7
8
9
int summary = 0;
for (int i = 0; i < size; ++i) {
     if (bills[i].getRate() == UNLIM) 
                   summary += bills[i].get_summ();
}
 
//где get_summ() - метод класса bill:
 
int Bill::get_summ() { return summ;}
SubaevaLF
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 6
29.04.2011, 06:19  [ТС]     работа с классами(как перебрать все объекты класса) #9
Спасибо) попробую довести задачку до ума))
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.04.2011, 11:30     работа с классами(как перебрать все объекты класса) #10
Цитата Сообщение от SubaevaLF Посмотреть сообщение
И еще как сделать эту функцию отдельной от класса Bill? но что бы можно было оперировать именно объектами данного класса???
Ну вообще такие функции и не должны быть в том же классе, они могут быть именно либо в другом классе, либо просто отдельно.
C++
1
2
3
4
5
6
7
8
9
int summAllBill(Bill *bills, int size) {
    int summ = 0;
    for (int i = 0; i < size; ++i) {
        // some code
        // summ += bills[i].getBlaBlaBla
    }
    
    return summ;
}
ну и вызвать такую функцию можно следующим образом:
C++
1
2
3
Bills bills[size];
// .......
summAllBill(bills, size);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2011, 09:12     работа с классами(как перебрать все объекты класса)
Еще ссылки по теме:

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов C++
Как загнать в STL очередь объекты другого класса с приоритетом? C++
C++ Классы и объекты в С++, компонента класса и экземпляр класса
C++ Поместить в динамически расширяемый массив объекты класса, производные от базового абстрактного класса
В массиве объектов класса все объекты заполняются данными последнего C++

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

Или воспользуйтесь поиском по форуму:
SubaevaLF
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 6
01.05.2011, 09:12  [ТС]     работа с классами(как перебрать все объекты класса) #11
Всем спасибо за помощь) задачка работает норм)
Yandex
Объявления
01.05.2011, 09:12     работа с классами(как перебрать все объекты класса)
Ответ Создать тему
Опции темы

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