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

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

Войти
Регистрация
Восстановить пароль
 
NikiKoyot
2 / 2 / 0
Регистрация: 08.12.2013
Сообщений: 34
#1

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

01.06.2014, 22:11. Просмотров 1020. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2014, 22:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача enum в качестве аргумента метода класса (C++):

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

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

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

Передача члена класса в качестве параметра метода - C++
Добрый день. Интересует следующий вопрос: как передать член класса как параметр по значению в метод того же класса? То есть необходимо,...

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

Шаблон в качестве аргумента метода(функции) - C++
Доброго дня! Возник вопрос. Существует ли возможность определить параметр метода, указав тип шаблона, но не указывая конкретные типы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kylroma
Одессит
200 / 71 / 22
Регистрация: 30.12.2013
Сообщений: 262
Записей в блоге: 1
Завершенные тесты: 1
01.06.2014, 22:33 #2
Я передавал и принимал целое число от 0. И с помощью switch\case устанавливал значения enum. Но подозреваю, что это не совсем правильно, поэтому послежу за темой, что другие посоветуют.
0
NikiKoyot
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
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
02.06.2014, 05:07 #4
1. Не начинать имена идентификаторов с подчеркивания. А именование с подчеркиванием в виде префикса и суффикса - вообще жесть. Строки 2-5 из третьего поста несколько раз перечитал, чтобы понять чему именно там присваивается.
2. Если хотите использовать снаружи - зачем объявление перечисления закинули в приватную часть класса?
3. Для приведения целого числа к enum можно использовать static_cast, но это небезопасно, лучше сделать перечисление публичным, см п2.
4. Заполнениестрок - сплошная копипаста. Как минимум, стоит вынести в отдельную функцию. А лучше использовать std::string.
1
kylroma
Одессит
200 / 71 / 22
Регистрация: 30.12.2013
Сообщений: 262
Записей в блоге: 1
Завершенные тесты: 1
02.06.2014, 09:26 #5
0x10, если не сложно ответить, зачем вообще приватная часть нужна. Когда её использовать? Я когда учил классы, то там в примерах всегда был приват и воспринимал я его как должное: есть класс, значит должен быть приват.
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
02.06.2014, 09:38 #6
kylroma, открытая часть - интерфейс класса. Закрытая - реализация. Цели - сокрытие реализации класса, которая может меняться при неизменном интерфейсе. Поддержка инвариантов класса.

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

Передача шаблона в качестве аргумента - C++
Всем доброго дня. Есть шаблон: template <typename T, ushort cnt> struct Array { private: ushort size; public: T...

Передача двухмерного массива в качестве аргумента - C++
Здравствуйте. Имеется код, метод print_matrix() выводит матрицу на печать. Всё работает, когда я заполняю массив в цикле, однако при...

Передача символьного массива в качестве аргумента - C++
#include <iostream> using namespace std; void mazeTraverse( char maze ); int main() { char a= { "############", ...

Передача массива в качестве аргумента функции - C++
В общем нужно передать массив в качестве аргумента без указания его размера, чтобы в дальнейшем присвоить все его содержимое другому...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.06.2014, 06:26
Ответ Создать тему
Опции темы

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