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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.87
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
#1

Класс внутри класса - возможно ли? - C++

14.08.2010, 15:30. Просмотров 8945. Ответов 21
Метки нет (Все метки)

Всем привет!
Помогите, пожалуйста, понять следующий текст задания:

Расширьте содержание класса employee /*2 объекта и 2 метода*/ из упражнения 4, включив в него класс date и перечисление etype(см. упражнение 6 главы 4). Объект класса date будет использоваться для хранения даты приема сотрудника на работу. Перечисление будет использовано для хранения статуса сотрудника: лаборант, секретарь, менеджер и т.д. Последние два поля данных должны быть закрытыми в определении класса employee, как и номер и оклад сотрудника. Вам будет необходимо разработать методы gatemploy() и putemploy(), предназначенные соответственно для ввода и отображения информации о сотруднике. Возможно, при создании методов вам понадобится ветвление switch для работы с перечисляемым типом etype. Напишите функцию main(), которая попросит пользователя ввести данные о трех сотрудниках, а затем выведет эти данные на экран.
Непонятен момент про класс date, которым нужно расширить класс employee. Возможно ли такое, чтобы класс создавался внутри класса, и если да, то я никак не смог это реализовать.
Так же непонятно,
Последние два поля данных должны быть закрытыми в определении класса employee
.
Т.е. как сделать закрытыми - это ясно, неясно о каких двух полях идет речь. Один из них enum, а вот про второй я не понял.
Помогите разобраться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2010, 15:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс внутри класса - возможно ли? (C++):

Класс внутри класса - C++
Есть 2 класса: большой -А и меньшый-Б. Класс Б есть параметром класса А. в большом классе есть процедуры использующие обекты класса Б! ...

Класс внутри класса - C++
Добрый вечер! Имею вот что: class Outer { public: double y ; class Inner

Не создается указатель на класс внутри класса - C++
Всем привет! У меня возникла очень интересная ситуация... У меня есть набор классов. Часть классов являются членами других классов. ...

Функция указатель на класс, определенный внутри шаблонного класса - C++
Доброго времени суток! Помогите пожалуйста разобрать со следующим кодом: template <class T> class List{ class Node{ public: ...

Структуру переделать в класс, чтобы массив был внутри класса - C++
есть структура struct CUSTOMER { unsigned short number; char name; char tel; ...

Объект внутри класса. Напишите класс Geo, моделирующий географические координаты на поверхности Земли - C++
Ребят, помогите решить задачу, пожалуйста. Чтт никак не получается :( Напишите класс Geo, моделирующий географические координаты на...

21
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
14.08.2010, 15:38 #2
Цитата Сообщение от half-node Посмотреть сообщение
Возможно ли такое, чтобы класс создавался внутри класса, и если да, то я никак не смог это реализовать.
Объявляешь где-нибудь класс date и создаешь объект типа date внутри класса employee.

Цитата Сообщение от half-node Посмотреть сообщение
Последние два поля данных должны быть закрытыми в определении класса employee
Если я правильно понял, один - это enum, а другой - объект класса date.
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.08.2010, 15:56 #3
Цитата Сообщение от Nameless One Посмотреть сообщение
Объявляешь где-нибудь класс date и создаешь объект типа date внутри класса employee.

Если я правильно понял, один - это enum, а другой - объект класса date.
По-моему в задании сказано, что нужно использовать именно вложенный класс, т.е. класс даты объявить внутри разрабатываемого класса. А поля, как я понял, это дата приема сотрудника и его статус.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
14.08.2010, 16:00 #4
Цитата Сообщение от Mr.X Посмотреть сообщение
По-моему в задании сказано, что нужно использовать именно вложенный класс
Ну и это можно сделать
Цитата Сообщение от Mr.X Посмотреть сообщение
А поля, как я понял, это дата приема сотрудника и его статус.
Те же яйца, только в профиль
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
14.08.2010, 18:23  [ТС] #5
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
class employee
{
private:
    class date
    {
    private:
        int day,month,year;
    public:
        date():day(0),month(0),year(0)
        {};
 
        void adddate()
        {
            char ch='a';
            cout << "Enter date dd/mm/yyyy: "; 
            cin >> day >> ch >> month >> ch >> year;
        }
 
        void showdate()
        {
            cout << day << '/' << month << '/' << year << endl;
        }
    };
    date d1;
    enum etype {en, me, pro, di};
    int num_emp;
    float salary;
public:
    employee():num_emp(0),salary(0.0)
    {};
 
    void gatemploye()
    {
        d1.adddate();
    }
 
    void putemploye()
    {
        d1.showdate();
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    employee em1;
    em1.gatemploye();
    em1.putemploye();
 
    getch();
    return 0;
}
При таком коде, при компиляции возвращает:
C++
1
2
3
1>c:\c++\projects\6_6\6_6\6_6.cpp(79): error C2664: employee::employee(const employee &): невозможно преобразовать параметр 1 из "int" в "const employee &"
1>          Причина: невозможно преобразовать "int" в "const employee"
1>          Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
UPD: Упс...точку с запятой пропустил после объявления класса..
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.08.2010, 21:39 #6
А где же ваше вышебурнообсуждаемое поле статуса?
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
15.08.2010, 03:30  [ТС] #7
Цитата Сообщение от Mr.X Посмотреть сообщение
А где же ваше вышебурнообсуждаемое поле статуса?
C++
1
enum etype {en, me, pro, di};
малость сокращенное
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.08.2010, 06:08 #8
half-node, ты немножко не понял. Ты только объявил внутри своего класса новую структуру даннх - перечисление. Но у твоего класса нет полей с типом этого перечисления, т.е. ты не можешь хранить информацию с ее помощью. Для этого тебе нужно объявить экземпляр этого перечисления внутри класса, к примеру, так:
C++
1
2
enum etype { en, me, pro, di };
etype type;

Не по теме:

PS. Не экономь место, используй нормальное форматирование кода и объявляй более осмысленные идентификаторы. Это облегчит жизнь и тебе, и тем, кто будет просматривать твой код.

0
easybudda
15.08.2010, 13:39
  #9

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
Не экономь место, используй нормальное форматирование кода и объявляй более осмысленные идентификаторы. Это облегчит жизнь и тебе, и тем, кто будет просматривать твой код.
ППКС

0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
15.08.2010, 17:55  [ТС] #10
Все понял, спасибо!
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
15.08.2010, 19:33  [ТС] #11
Объясните, пожалуйста, почему данный код не хочет адекватно работать с циклом.
Т.е. так то он работает, но после первого заполнения, начинает пропускать ввод в name.
Можно, конечно, воспользоваться cin >> name, но мне нунжо сделать так, чтобы учитывались пробелы.
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
 
class employee
{
private:
    string name;
    long number;
public:
    employee():number(0)
    {};
 
    void getdata()
    {
        cout << "Enter name: ";
        getline(cin,name);
        cout << "Enter number: ";
        cin >> number;
    }
 
    void putdata()const
    {
        cout << "Name: " << name << endl;
        cout << "Number: " << number << endl;
    }
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    employee emp[100];
    int n=0;
    char ch;
    do
    {
        emp[n++].getdata();
        cout << "Repeat?(y/n): "; cin >> ch;
    }while(ch!='n');
    
    for(int i=0; i<n;i++)
        emp[i].putdata();
 
    getch();
    return 0;
}
Картинка следующая:
0
Миниатюры
Класс внутри класса - возможно ли?  
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.08.2010, 19:37 #12
half-node, После
C++
1
cin>>number
поставьте
C++
1
cin.get()
или
C++
1
while(getchar()!='\n');
Ну вообщем что-то, что очищает поток.
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
15.08.2010, 19:46  [ТС] #13
эм..А можно поинтересоваться, почему таки не обрабатывается команда?

Нет. Не помогло, в любом случае.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.08.2010, 19:49 #14
half-node, Тогда перед getline. Поинтересоваться можно. Потому что в буфере после cin остаются лишние символы.
1
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
15.08.2010, 19:58  [ТС] #15
Цитата Сообщение от Lavroff Посмотреть сообщение
half-node, Тогда перед getline. Поинтересоваться можно. Потому что в буфере после cin остаются лишние символы.
Спасибо! Перед getline заработало корректно.
Только у меня возник логичный вопрос. Каким образом можно обнулять объект string конструктором?
напр: name("")?
0
15.08.2010, 19:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2010, 19:58
Привет! Вот еще темы с ответами:

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями...

Создать объект внутри класса, который может вызывать функцию этого класса - C++
Ребята помогите уже несколько дней мучаюсь. Хочу сделать программу в консоле демонстрации работы лифта в здании 2 этажа. Сделал класс...

Заполнение вектора класса внутри самого класса - C++
class A { private: int a; public: A() { a = 0; }; A get(vector &lt;A&gt;* vec)


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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