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

Конструктор, деструктор, инкапсуляция - C++

Восстановить пароль Регистрация
 
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
15.12.2011, 17:09     Конструктор, деструктор, инкапсуляция #1
Задача на конструктор, деструктор, инкапсуляцию...

Создайте класс Tel, представляющий собой разовый платеж за телефонный разговор. Класс должен включать в себя поля:
1)номера телефона
2)тарифа за минуту разговора
3)скидка (в процентах)
4)времени разговора (в минутах)
5)суммы к оплате
Реализовать метод вычисления суммы к оплате. В программе продемонстрировать создание, инициализацию и обработку массива объектов типа Tel с различными исходными данными для вычисления сумм к оплате.

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

Вот просто сделал, но надо с конструктором, деструктором и инкапсуляцией..
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
#include <iostream>
using namespace std;
 
class Tel
{
public:
    long long nomer;
    int tarif;
    int skidka;
    int time;
    int oplata;
};
 
void main()
{
    setlocale(LC_ALL,"Russian");
    Tel mas[5], tmp;
 
    for (int i=0; i<5; i++)
    {
        cout<<"--------------------------------------------------------"<<endl;
        cout<<"Введите номер:"<<" ";cin>>mas[i].nomer;
        cout<<"Тариф за минуту раговора:"<<" ";cin>>mas[i].tarif;
        cout<<"Скидка (в процентах):"<<" ";cin>>mas[i].skidka;
        cout<<"Время разговора (в минутах):"<<" ";cin>>mas[i].time;
    }
    cout<<"--------------------------------------------------------"<<endl;
 
    for (int i=0; i<5; i++)
    {
        tmp.oplata=mas[i].tarif*mas[i].time;    //Расчет оплаты
        tmp.skidka=(tmp.oplata/100)*mas[i].skidka; //Расчет скидки
        mas[i].oplata=tmp.oplata-tmp.skidka;    //Расчет итоговой оплаты
    }
    for (int i=0; i<5; i++)
    {
        cout<<"**************************************"<<endl;
        cout<<"Номер телефона:"<<mas[i].nomer<<endl;
        cout<<"Тариф:"<<mas[i].tarif<<endl;
        cout<<"Скидка(в процентах):"<<mas[i].skidka<<endl;
        cout<<"Количество минут:"<<mas[i].time<<endl;
        cout<<"К оплате:"<<mas[i].oplata<<endl;
    }
    cout<<"**************************************"<<endl;
    tmp.oplata=0;
    for (int i=0; i<5; i++)
        tmp.oplata+=mas[i].oplata;
        cout<<"       Общая сумма к оплате:"<<tmp.oplata<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 17:09     Конструктор, деструктор, инкапсуляция
Посмотрите здесь:

конструктор и деструктор в C++ C++
C++ Конструктор и деструктор
Конструктор/деструктор C++
Конструктор инициализации, конструктор копирования, деструктор C++
C++ Конструктор и деструктор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
15.12.2011, 17:23     Конструктор, деструктор, инкапсуляция #2
C++
1
2
3
4
5
6
private:
        long long nomer;
        int tarif;
        int skidka;
        int time;
        int oplata;
вот она инкапсуляция))
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
15.12.2011, 17:30     Конструктор, деструктор, инкапсуляция #3
+ добавь методы для доступа к полям класса и вычисления итоговой суммы
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
15.12.2011, 17:39  [ТС]     Конструктор, деструктор, инкапсуляция #4
Цитата Сообщение от ExcellencE Посмотреть сообщение
C++
1
2
3
4
5
6
private:
        long long nomer;
        int tarif;
        int skidka;
        int time;
        int oplata;
вот она инкапсуляция))
Я в курсе что это такое. Вопрос в том, как с этим работать...
Цитата Сообщение от insolent Посмотреть сообщение
+ добавь методы для доступа к полям класса и вычисления итоговой суммы
Как это сделать?

ps: я знаю что такое инкапсуляция, конструктор и деструктор... Но не знаю как этим пользоваться. Как обращаться.
ps1: запостил на форуме, что бы показали на примере... дабы это моя первая работа с классами..
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
15.12.2011, 18:13     Конструктор, деструктор, инкапсуляция #5
Цитата Сообщение от Alexpm Посмотреть сообщение
ps: я знаю что такое инкапсуляция, конструктор и деструктор...
Значит, не знаешь. Мы знаем что-нить только тогда, когда можем это запрограммировать.
1. Почему все поля-деньги - целые?
2. Конструктор-то напиши для заполнения полей. И не забудь в конструкторе поставить проверку получаемых данных на корректность.
3. Потом напишем метод вычисления.
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
15.12.2011, 19:53  [ТС]     Конструктор, деструктор, инкапсуляция #6
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
1. Почему все поля-деньги - целые?
Потому что так проще и никак не влияет на поставленный вопрос.

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
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
...
class Tel
{
public:
    Tel(int _nomer, int _tarif, int _skidka, int _time)
    {
        nomer=_nomer;
        tarif=_tarif;
        skidka=_skidka;
        time=_time;
    }
...
}
 
void main()
{
     ...
     int _nomer, _tarif, _skidka, _vremia
     cin>>_nomer;
     cin>>_tarif;
     cin>>_skidka;
     cin>>_vremia;
}
Так верно будет? Я не знаю как иначе, примера не могу найти

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
3. Потом напишем метод вычисления.
Его можно оформить как функцию в классе, в разделе public?
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
15.12.2011, 20:24     Конструктор, деструктор, инкапсуляция #7
public заменили на private - спрятали наши поля(теперь их значения можно смотреть и менять только внутри класса), для того чтобы как-то с ними работать мы и пишем конструктор и методы.
То что Вы написали очень похоже на правду, но если вы используете подчеркивание, ставьте его перед именами защищенных переменных, а не наоборот (просто совет).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2011, 00:04     Конструктор, деструктор, инкапсуляция
Еще ссылки по теме:

Конструктор, деструктор C++
Конструктор и деструктор C++

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

Или воспользуйтесь поиском по форуму:
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
16.12.2011, 00:04     Конструктор, деструктор, инкапсуляция #8
Цитата Сообщение от Alexpm Посмотреть сообщение
Потому что так проще и никак не влияет на поставленный вопрос.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
class Tel
{
public:
    Tel(int _nomer, int _tarif, int _skidka, int _time)
    {
        nomer=_nomer;
        tarif=_tarif;
        skidka=_skidka;
        time=_time;
    }
...
}
 
void main()
{
     ...
     int _nomer, _tarif, _skidka, _vremia
     cin>>_nomer;
     cin>>_tarif;
     cin>>_skidka;
     cin>>_vremia;
}
Так верно будет? Я не знаю как иначе, примера не могу найти
Его можно оформить как функцию в классе, в разделе public?
1. Никогда не делай, как проще, а всегда делай, как правильно.
2. Не рекомендую начинать имена с подчеркивания - это обычно делает компилятор.
3. главная функция должна иметь заголовок int main()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
     ...
     int nomer, vremia;
     double tarif, skidka,
     cout << "Nomer  = ";   cin>>nomer;
     cout << "Tarif    = ";    cin>>tarif;
     cout << "Skidka = ";    cin>>skidka;
     cout << "Vremia = ";    cin>>vremia;
 
Tel telefon(nomer, tarif, skidka, time);
 
system("pause");
return 0;
}
Yandex
Объявления
16.12.2011, 00:04     Конструктор, деструктор, инкапсуляция
Ответ Создать тему
Опции темы

Текущее время: 20:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru