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

Передача enum в качестве аргумента метода класса - C++

Восстановить пароль Регистрация
 
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
01.06.2014, 22:11     Передача enum в качестве аргумента метода класса #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
//class order;
class ticket{
    enum type_of_place { coupe, general, berth, wagon_lit }_type_of_place;
    char* dispatch_station;
    char* arrival_station;
    char* departure_date;
    char* arrival_date;
public:
    ticket();
    ticket(type_of_place _type_of_place_, char* _dispatch_station, char* _arrival_station, char* _departure_date, char* _arrival_date);
    ticket(const ticket &_ticket);
    ticket operator=(const ticket &_ticket);
    bool operator==(const ticket &_ticket);
    bool operator!=(const ticket &_ticket);
    //bool operator==(const order &_order);
    //bool operator!=(const order &_order);
    void set_typeOfPlace(type_of_place _type_of_place_);
    const type_of_place get_typeOfPlace()const;
    void set_dispathStation(char* _dispatch_station);
    const char* get_dispathStation()const;
    void set_arrivalStation(char *_arrival_station);
    const char* get_arrivalStation()const;
    void set_departureDate(char* _departure_date);
    const char* get_departureDate()const;
    void set_arrivalDate(char* _arrival_date);
    const char* get_arrivalDate()const;
    void show_ticket();
    ~ticket();
};
Что и как передать в перегруженный конструктор и метод set_typeOfPlace, чтобы _type_of_place принимало значений одного из перечислений?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2014, 22:11     Передача enum в качестве аргумента метода класса
Посмотрите здесь:

C++ [C++, OpenGL, glut] передача метода класса в качестве параметра функции glutDisplayFunc()
C++ Передача двумерного массива в качестве аргумента функции
C++ Передача функции в качестве аргумента массив
Передача двухмерного массива в качестве аргумента C++
C++ Передача метода класса в качестве параметра для метода другого класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kylroma
Одессит
 Аватар для kylroma
44 / 44 / 18
Регистрация: 30.12.2013
Сообщений: 203
Записей в блоге: 1
Завершенные тесты: 1
01.06.2014, 22:33     Передача enum в качестве аргумента метода класса #2
Я передавал и принимал целое число от 0. И с помощью switch\case устанавливал значения enum. Но подозреваю, что это не совсем правильно, поэтому послежу за темой, что другие посоветуют.
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
02.06.2014, 03:29  [ТС]     Передача enum в качестве аргумента метода класса #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
ticket::ticket(int _type_of_place_, char* _dispatch_station, char* _arrival_station, char* _departure_date, char* _arrival_date){
    if (_type_of_place_ == 0)  _type_of_place= type_of_place::coupe;
    if (_type_of_place_ == 1) _type_of_place = type_of_place::general;
    if (_type_of_place_ == 2) _type_of_place = type_of_place::berth;
    if (_type_of_place_ == 3) _type_of_place = type_of_place::wagon_lit;
 
    if (_dispatch_station){
        dispatch_station = new char[strlen(_dispatch_station) + 1];
        strcpy_s(dispatch_station, strlen(_dispatch_station) + 1, _dispatch_station);
    }
    else dispatch_station = NULL;
 
    if (_arrival_station){
        arrival_station = new char[strlen(_arrival_station) + 1];
        strcpy_s(arrival_station, strlen(_arrival_station) + 1, _arrival_station);
    }
    else arrival_station = NULL;
 
    if (_departure_date){
        departure_date = new char[strlen(_departure_date) + 1];
        strcpy_s(departure_date, strlen(_departure_date) + 1, _departure_date);
    }
    else departure_date = NULL;
 
    if (_arrival_date){
        arrival_date = new char[strlen(_arrival_date) + 1];
        strcpy_s(arrival_date, strlen(_arrival_date) + 1, _arrival_date);
    }
    else arrival_date = NULL;
}
Похоже, что по другому никак.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.06.2014, 05:07     Передача enum в качестве аргумента метода класса #4
1. Не начинать имена идентификаторов с подчеркивания. А именование с подчеркиванием в виде префикса и суффикса - вообще жесть. Строки 2-5 из третьего поста несколько раз перечитал, чтобы понять чему именно там присваивается.
2. Если хотите использовать снаружи - зачем объявление перечисления закинули в приватную часть класса?
3. Для приведения целого числа к enum можно использовать static_cast, но это небезопасно, лучше сделать перечисление публичным, см п2.
4. Заполнениестрок - сплошная копипаста. Как минимум, стоит вынести в отдельную функцию. А лучше использовать std::string.
kylroma
Одессит
 Аватар для kylroma
44 / 44 / 18
Регистрация: 30.12.2013
Сообщений: 203
Записей в блоге: 1
Завершенные тесты: 1
02.06.2014, 09:26     Передача enum в качестве аргумента метода класса #5
0x10, если не сложно ответить, зачем вообще приватная часть нужна. Когда её использовать? Я когда учил классы, то там в примерах всегда был приват и воспринимал я его как должное: есть класс, значит должен быть приват.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.06.2014, 09:38     Передача enum в качестве аргумента метода класса #6
kylroma, открытая часть - интерфейс класса. Закрытая - реализация. Цели - сокрытие реализации класса, которая может меняться при неизменном интерфейсе. Поддержка инвариантов класса.

Например, реализация вектора может использовать три указателя (начало блока, размер, емкость), либо указатель и две целочисленные переменные. Независимо от выбора реализации, интерфейс остается прежним. Плюс, у пользователя нет способов выстрелить себе в ногу - выставить отрицательный размер, например.
NikiKoyot
 Аватар для NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
05.06.2014, 01:02  [ТС]     Передача enum в качестве аргумента метода класса #7
0x10,
1. Со стандартами не знаком. По поводу 2-5 строк http://msdn.microsoft.com/en-us/library/2dzy4k6e.aspx.
2. Одно из условию задачи это то, что все свойства класса должны быть приватными.
3. См. ссылку в п1.
4. Спасибо. В следующий раз обязательно использую std::string и вынесу в отдельный метод.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 06:26     Передача enum в качестве аргумента метода класса
Еще ссылки по теме:

Передача символьного массива в качестве аргумента C++
C++ Передача члена класса в качестве параметра метода
C++ Передача объекта в качестве аргумента функции (метода)

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

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.06.2014, 06:26     Передача enum в качестве аргумента метода класса #8
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Не понял к чему это. По ссылке написано примерно то же, что я и сказал.
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Одно из условию задачи это то, что все свойства класса должны быть приватными.
Про вложенные типы ничего не сказано - нет ничего страшного в том, чтобы сделать его публичным.
Yandex
Объявления
05.06.2014, 06:26     Передача enum в качестве аргумента метода класса
Ответ Создать тему
Опции темы

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