Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
1

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

01.06.2014, 22:11. Показов 5239. Ответов 7
Метки нет (Все метки)

Есть класс
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 принимало значений одного из перечислений?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 22:11
Ответы с готовыми решениями:

Передача метода класса в качестве аргумента внешней функции
Столкнулся со следующей проблемой. Пусть у меня есть некая внешняя функция, которая принимает в...

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог...

Указатель на метод класса в качестве аргумента метода класса
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот потребовалось создать ХХХ...

Передача объекта в качестве аргумента функции (метода)
На "Интуите" имеем код: class Complex { public: int real; // вещественная часть int...

7
Одессит
242 / 87 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
01.06.2014, 22:33 2
Я передавал и принимал целое число от 0. И с помощью switch\case устанавливал значения enum. Но подозреваю, что это не совсем правильно, поэтому послежу за темой, что другие посоветуют.
0
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
02.06.2014, 03:29  [ТС] 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;
}
Похоже, что по другому никак.
0
3251 / 2053 / 351
Регистрация: 24.11.2012
Сообщений: 4,906
02.06.2014, 05:07 4
1. Не начинать имена идентификаторов с подчеркивания. А именование с подчеркиванием в виде префикса и суффикса - вообще жесть. Строки 2-5 из третьего поста несколько раз перечитал, чтобы понять чему именно там присваивается.
2. Если хотите использовать снаружи - зачем объявление перечисления закинули в приватную часть класса?
3. Для приведения целого числа к enum можно использовать static_cast, но это небезопасно, лучше сделать перечисление публичным, см п2.
4. Заполнениестрок - сплошная копипаста. Как минимум, стоит вынести в отдельную функцию. А лучше использовать std::string.
1
Одессит
242 / 87 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
02.06.2014, 09:26 5
0x10, если не сложно ответить, зачем вообще приватная часть нужна. Когда её использовать? Я когда учил классы, то там в примерах всегда был приват и воспринимал я его как должное: есть класс, значит должен быть приват.
0
3251 / 2053 / 351
Регистрация: 24.11.2012
Сообщений: 4,906
02.06.2014, 09:38 6
kylroma, открытая часть - интерфейс класса. Закрытая - реализация. Цели - сокрытие реализации класса, которая может меняться при неизменном интерфейсе. Поддержка инвариантов класса.

Например, реализация вектора может использовать три указателя (начало блока, размер, емкость), либо указатель и две целочисленные переменные. Независимо от выбора реализации, интерфейс остается прежним. Плюс, у пользователя нет способов выстрелить себе в ногу - выставить отрицательный размер, например.
1
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
05.06.2014, 01:02  [ТС] 7
0x10,
1. Со стандартами не знаком. По поводу 2-5 строк http://msdn.microsoft.com/en-u... y4k6e.aspx.
2. Одно из условию задачи это то, что все свойства класса должны быть приватными.
3. См. ссылку в п1.
4. Спасибо. В следующий раз обязательно использую std::string и вынесу в отдельный метод.
0
3251 / 2053 / 351
Регистрация: 24.11.2012
Сообщений: 4,906
05.06.2014, 06:26 8
Цитата Сообщение от NikiKoyot Посмотреть сообщение
По поводу 2-5 строк http://msdn.microsoft.com/en-u... y4k6e.aspx.
Не понял к чему это. По ссылке написано примерно то же, что я и сказал.
Цитата Сообщение от NikiKoyot Посмотреть сообщение
Одно из условию задачи это то, что все свойства класса должны быть приватными.
Про вложенные типы ничего не сказано - нет ничего страшного в том, чтобы сделать его публичным.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2014, 06:26
Помогаю со студенческими работами здесь

Передача члена класса в качестве параметра метода
Добрый день. Интересует следующий вопрос: как передать член класса как параметр по значению в метод...

[C++, OpenGL, glut] передача метода класса в качестве параметра функции glutDisplayFunc()
Пишу программу для обхода бинаронго дерева поиска. Программа написана и кажется даже работает, но...

Использование метода класса как функции в качестве типизированного аргумента в методе класса
Использование метода класса как функции в качестве типизированного аргумента в методе класса ...

Передача элемента формы в качестве аргумента метода
Всем доброго дня! Подскажите пожалуйста начинающему... Пишу метод в который в качестве параметра...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru