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

Вызов метода внутреннего класса методом внешнего класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Nazgul94
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 24
21.06.2013, 20:13     Вызов метода внутреннего класса методом внешнего класса #1
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про вложенные классы ничего, а задача в конце есть. Нужно создать класс, который будет содержать информацию о сотруднике(номер, зарплата, должность и дата трудоустройства). Причем дата трудоустройства выделена в отдельный класс со своими методами(ввод и вывод). Как обратиться к методу внутреннего класса в описании метода внешнего, который вводит(выводит) информацию о сотруднике. Или я все таки перемудрил и можно проще?
Вот листинг программы:


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
#include <iostream>
#include <conio.h>
#include <locale>
 
using namespace std;
//////////////////////////
enum etype { laborer, secretary, manager, accountant, executive, researcher };
char b;
 
class Emploe
{
   private:
       etype dol;
       int number;
       float salary;
   public:
       Emploe(): number(0), salary(0.0)
       { }
       void getemploe()
           { 
               cout << "Введите номер сотрудника: " ;   cin >> number;
               cout << "Введите величину его оклада: "; cin >> salary;
               cout << "Введите первую букву должности: "; cin >> b;
                switch (b)       
                     { 
                      case 'l': dol = laborer;    break;
                      case 's': dol = secretary;  break;
                      case 'm': dol = manager;    break;
                      case 'a': dol = accountant; break;
                      case 'e': dol = executive;  break;
                      case 'r': dol = researcher; break;
                      default: cout << "Введите из существующих должностей "; break; // в случае если ни один не совпал
                     };
              cout << "Введите дату трудоустройства сотрудника: ";
              cin >> /////////?????????????????????????
             
           }
       void showemploe()
          {
            cout <<"\nНомер: " << number;
            cout << "\nЗарплата: "  << salary;
                    switch (dol)
                     {
                         case laborer:      cout << "\nДолжность: Библиотекрь ";   break;
                         case secretary:    cout << "\nДолжность: Секретарь ";     break;
                         case manager:      cout << "\nДолжность: Менеджер ";      break;
                         case accountant:   cout << "\nДолжность: Бухгалтер ";     break;
                         case executive:    cout << "\nДолжность: Администратор "; break;
                         case researcher:   cout << "\nДолжность: Исследователь "; break;
                     };
           cout << "Должность " << dol;
           cout << "Дата: " << //////////??????????????????;
            
          }
                       class Date
                {
                     private:
                         int day;
                         int month;
                         int year;
                     public:
                         Date(): day(0), month(0), year(0)
                         { }
                         void getdate()
                            {cout << "Введите день, месяц и годв формате (д/м/г):";  cin >> day >> month >> year;}
                         void showdate()
                        {cout << day << "/" << month << "/" << year;}
               };
 
};
 
int main()
{
    setlocale(LC_ALL,"RUS");
////как реализовать вызовы методов
 
 
_getch();
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.06.2013, 20:18     Вызов метода внутреннего класса методом внешнего класса #2
Объявите в классе Emploe закрытую переменную типа Date с именем, например, DateOfEmployment. Потом в функции void getemploe() добавляете что-то вроде:
C++
1
2
std::cout << "Ввод даты...";
DateOfEmployment.getdate();
Я бы сделал класс Date закрытым. + не забываем добавить инициализацию переменной DateOfEmployment в конструкторы.
Nazgul94
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 24
21.06.2013, 20:54  [ТС]     Вызов метода внутреннего класса методом внешнего класса #3
Спс Oliver разобрался. Хотя я не понял как в конструкторе инициализировать экземпляр класса, и всегда ли нужно вообще писать конструктор для полей класса если он есть по умолчанию(иногда прога пашет и без него). Но главное все работает.
Вот код рабочей проги:

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
#include <iostream>
#include <conio.h>
#include <locale>
 
using namespace std;
//////////////////////////
enum etype { laborer, secretary, manager, accountant, executive, researcher };
char b;
 
class Emploe
{
   private:
       class Date
                {
                     private:
                         int day;
                         int month;
                         int year;
                     public:
                         Date(): day(0), month(0), year(0)
                         { }
                         void getdate()
                            {cout << "Введите день, месяц и годв формате (д/м/г):";  cin >> day >> month >> year;}
                         void showdate()
                        {cout << day << "/" << month << "/" << year;}
               };
       etype dol;
       int number;
       float salary;
       Date DateOfEmploe;
   public:
       Emploe(): number(0), salary(0.0)
       { }
       void getemploe()
           { 
               cout << "Введите номер сотрудника: " ;   cin >> number;
               cout << "Введите величину его оклада: "; cin >> salary;
               cout << "Введите первую букву должности: "; cin >> b;
                switch (b)       
                     { 
                      case 'l': dol = laborer;    break;
                      case 's': dol = secretary;  break;
                      case 'm': dol = manager;    break;
                      case 'a': dol = accountant; break;
                      case 'e': dol = executive;  break;
                      case 'r': dol = researcher; break;
                      default: cout << "Введите из существующих должностей "; break; // в случае если ни один не совпал
                     };
              cout << "Введите дату трудоустройства сотрудника: ";
              DateOfEmploe.getdate();
             
           }
       void showemploe()
          {
            cout <<"\nНомер: " << number;
            cout << "\nЗарплата: "  << salary;
                    switch (dol)
                     {
                         case laborer:      cout << "\nДолжность: Библиотекрь ";   break;
                         case secretary:    cout << "\nДолжность: Секретарь ";     break;
                         case manager:      cout << "\nДолжность: Менеджер ";      break;
                         case accountant:   cout << "\nДолжность: Бухгалтер ";     break;
                         case executive:    cout << "\nДолжность: Администратор "; break;
                         case researcher:   cout << "\nДолжность: Исследователь "; break;
                     };
           cout << "\nДата: ";
           DateOfEmploe.showdate();
            
          }
                
 
};
 
int main()
{
    setlocale(LC_ALL,"RUS");
   Emploe e;
   e.getemploe();
   e.showemploe();
   
 
 
_getch();
return 0;
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
21.06.2013, 20:59     Вызов метода внутреннего класса методом внешнего класса #4
Цитата Сообщение от Nazgul94 Посмотреть сообщение
Хотя я не понял как в конструкторе инициализировать экземпляр класса, и всегда ли нужно вообще писать конструктор для полей класса если он есть по умолчанию(иногда прога пашет и без него).
Вот так:
C++
1
2
3
4
5
       int number;
       float salary;
       Date DateOfEmploe;
   public:
       Emploe(): number(0), salary(0.0), DateOfEmploe() {}
Желательно писать, вдруг у какого нибудь поля класса нет конструктора по умолчанию...
Nazgul94
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 24
21.06.2013, 23:24  [ТС]     Вызов метода внутреннего класса методом внешнего класса #5
ммм сорри затупил насчет инициализации экземпляра))
Yandex
Объявления
21.06.2013, 23:24     Вызов метода внутреннего класса методом внешнего класса
Ответ Создать тему
Опции темы

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