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

ООП - C++

Восстановить пароль Регистрация
 
Boskos
 Аватар для Boskos
4 / 4 / 0
Регистрация: 03.02.2010
Сообщений: 65
04.02.2010, 17:32     ООП #1
помогите переделать программу в ООП,
Создать класс, описывающий следующие понятие
рабочий! фамилия,стаж,часовая зароботная плата, колличество отработаных часов. Наити: 1) Расчет зароботной платы за отработанное время 2) в зависимости от стажа начисляется премия(при стаже до 1 года 0%, до 3 лет 5%, до 5 лет 8%, свыше10 лет 15%), вывод информации о рабочем на экран!



вот эта программа

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
#include<stdio.h>
#include<string.h>
typedef struct {
    char fio[40];
    int st;
    int zar;
    int kol; } rab;
 
 
    void main()
    { rab a;
    rab wwod(); // îáüÿâëåГ*ГЁГҐ ГґГіГ*êöèè
    void print(rab);
    void ras (rab);
    int raszar (rab);
a=wwod();// âûçîâ ГґГіГ*êöèè
print (a);
ras (a);
printf("Premial'nie = %d\n",raszar (a));
    }
 
 
    rab wwod() // îïðåäåëåГ*ГЁГҐ ГґГіГ*êöèè
    { rab c;
printf("fio   :");
scanf("%s",&c.fio);
printf("st   :");
scanf("%d",&c.st);
printf("zar   :");
scanf("%d",&c.zar);
printf("kol   :");
scanf("%d",&c.kol);
return c; }
 
    void print(rab c)
    {
        printf("%s\n",c.fio);
        printf("%d\n",c.st);
        printf("%d\n",c.zar);
        printf("%d\n",c.kol);
    }
 
 
    void ras (rab s){
        int z;
        z=s.kol*s.zar;
        printf("Zarobotnaya plata = %d\n",z);
    }
 
    int raszar (rab s)
    { 
        if(s.st<1)
                return s.zar;
        if(s.st>=1 && s.st<3)
                return(s.zar + (s.zar/100)*5);
        if(s.st>=3 && s.st<5)
                return(s.zar + (s.zar/100)*8);
        if(s.st>10)
                return(s.zar + (s.zar/100)*15);
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2010, 17:32     ООП
Посмотрите здесь:

ООП на С++ C++
ООП C++
C++ ООП C++
C++ ООП
C++ ООП
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.02.2010, 17:57     ООП #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CWorker {
public:
 CWorker (const char *pName, int stazh, double chas_zarpl, double chasy)
: m_Stazh (stazh)
, m_ChasZrpl (char_zarpl
, m_Chasy (chasy)
 { 
    if (::strlen (pName > sizeof (m_arrName){
        ::memcpy (m_arrName, pName, sizeof (m_arrName)-1;
        *(m_arrName+sizeof (m_arrName)-1) = '\0';
    } else {
        ::strcpy (m_pName, pName);
    }
}
 
 ~CWorker();
 bool getName (char *pNameBuf, int bufsize, int *pRequiredSize);
 int getStazh () { return m_Stazh; }
// аналогично для остальных членов, + сами члены определить как private
};
а потом где-то определить этого рабочего и посчитать его зарплату, используя его getters
SerЁga
32 / 32 / 4
Регистрация: 18.08.2009
Сообщений: 93
04.02.2010, 18:24     ООП #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
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
#include<iostream>
using namespace std;
class rab
{
    char fio[40];
    int st;
    int zar;
    int kol;
    int zarab_plata;
    int premiya;
public:
    rab() //контруктор
    {
        st=0;zar=0;kol=0;zarab_plata=0;premiya=0;   
    }
    rab(rab &obj)//конструктор копирования
    {
        strcpy(fio,obj.fio);
        st=obj.st;
        zar=obj.zar;
        kol=obj.kol;
        zarab_plata=obj.zarab_plata;
        premiya=obj.premiya;
    }
    void wwod()
    {
        cout<<"fio   :"<<endl;
        cin.getline(fio,40);
        cout<<"st   :"<<endl;
        cin>>st;
        cout<<"zar   :"<<endl;
        cin>>zar;
        cout<<"kol   :"<<endl;
        cin>>kol;
    }
 
    void print()
    {
        cout<<fio<<endl;
        cout<<st<<endl;
        cout<<zar<<endl;
        cout<<kol<<endl;
        cout<<zarab_plata<<endl;
        cout<<premiya<<endl;
    }
 
    void set_zpl()
    {
        zarab_plata=zar*kol;
    }
    void set_premiya() 
    {
        if(st<1)
             premiya=zar;
        if(st>=1 && st<3)
            premiya= (zar + (zar/100)*5);
        if(st>=3 && st<5)
            premiya= (zar + (zar/100)*8);
        if(st>10)
            premiya=(zar + (zar/100)*15);
    }
};
 
    void main()
    { 
      rab a;
      a.wwod();
      a.set_zpl();
      a.set_premiya();
      a.print();    
    }
Тут может быть много вариантов, я так написал.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.02.2010, 18:56     ООП #4
SerЁga, ты прав, вариантов много. и то, что твой класс не только данные прячет, а еще и что-то полезное делает, хорошо в общем. но чем ближе наша модель по поведению в нашем ООП к реальным объектам, тем более оправдано само ООП. а твой рабочий считает себе зарплату. оправдано ли в этот класс помещать эту ответственность? явно нет.
второе - если уже пишешь ф-ю print(), то никогда, даже если вывод - только в целях отладки, не пиши так как ты написал: столбик чисел. выводи что они обозначают - сэкономишь массу времени и нервов.
Boskos
 Аватар для Boskos
4 / 4 / 0
Регистрация: 03.02.2010
Сообщений: 65
04.02.2010, 20:31  [ТС]     ООП #5
Цитата Сообщение от SerЁga Посмотреть сообщение
st=0;zar=0;kol=0;zarab_plata=0;premiya=0;
для чего это приравнивать к нулю?
SerЁga
32 / 32 / 4
Регистрация: 18.08.2009
Сообщений: 93
05.02.2010, 13:44     ООП #6
При объявлении
rab a
выполнится конструктор по умолчанию.В данном случае все поля класса обнуляются.
Без этого можно обойтись, но при создании объекта поля класса будут содержать просто мусор.
На счёт того что заработная плата не должна содержаться в классе, можно создать friend ф-цию которая будет считать зарплату конкретного рабочего. Вариантов реализации масса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2010, 14:07     ООП
Еще ссылки по теме:

ООП C++
C++ ООП
C++ ООП

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

Или воспользуйтесь поиском по форуму:
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.02.2010, 14:07     ООП #7
Цитата Сообщение от SerЁga Посмотреть сообщение
При объявлении
rab a
выполнится конструктор по умолчанию.В данном случае все поля класса обнуляются.
Без этого можно обойтись, но при создании объекта поля класса будут содержать просто мусор.
правильно. оставлять переменные неинициализированными - разгильдяйство. но делать это лучше так:

C++
1
2
3
4
5
6
7
8
        rab() //контруктор
        : st (0)
        , zar (0)
        , kol (0)
        , zarab_plata (0)
        , premiya (0)
        {
        }
Yandex
Объявления
05.02.2010, 14:07     ООП
Ответ Создать тему
Опции темы

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