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

Параметры функции и их считывание - C++

Восстановить пароль Регистрация
 
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,080
13.07.2015, 06:08     Параметры функции и их считывание #1
Здравствуйте! Подскажите, как такое реализовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
....
void ClassA::Init(что здесь должно быть? Enum?)
{
  if( Enum == 0)
  ....
  else if( Enum == 1)
  etc.....
}
.....
main.cpp
 
 
A->Init(ENUM1 | ENUM2);
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 06:08     Параметры функции и их считывание
Посмотрите здесь:

C++ Параметры функции
Формальные параметры в функции C++
C++ функции и параметры
C++ Параметры функции
C++ Какими способами можно использовать функции класса B, как параметры функции Sub класса А?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,964
13.07.2015, 06:23     Параметры функции и их считывание #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
switch(Enum)
{
case 0:
   ...
   break;
case 1:
   ...
   break;
...
default:
   ...
}
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 10:19     Параметры функции и их считывание #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
class MyListBoxItem
{
public:
    enum State
    {
        None = 0,
        Ok = 1,
        Fail = 2
    };
 
        MyListBoxItem(State _value)
    {
        switch(_value)
                {
                 case None:
                        break;
                 case Ok:
                        break;
                 case Fail:
                        break;
                }
    }
}
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,080
13.07.2015, 14:19  [ТС]     Параметры функции и их считывание #4
sashatref
у меня не работает так:
C++
1
MyListBoxItem f(MyListBoxItem::State::None | MyListBoxItem::State::Ok);
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 14:42     Параметры функции и их считывание #5
Helldrg, отвлекли, забыл исправить:
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
#include <iostream>
#include <conio.h>
 
enum State
{
    None = 1,
    Ok = 2,
    Fail = 4
};
 
State operator | (State a, State b)
{
    return static_cast<State>(static_cast<int>(a) | static_cast<int>(b));
}
 
class MyClass
{
public:
    MyClass(State _value)
    {
        if (_value & None)
        {
            std::cout << "None\n";
        }
        if (_value & Ok)
        {
            std::cout << "Ok\n";
        }
        if (_value & Fail)
        {
            std::cout << "Fail\n";
        }
    }
};
 
int main()
{
    MyClass((State)Fail);
    MyClass(Fail | None);
    MyClass(Fail | None | Ok);
 
 
    _getch();
    return 0;
}
Добавлено через 1 минуту
Я не сильно понимаю, почему если передаю один элемент, то его нужно приводить к типу enum, может кто более опытный подскажет?
C++
1
MyClass((State)Fail);
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,080
13.07.2015, 15:10  [ТС]     Параметры функции и их считывание #6
sashatref
Получается и в функциях winAPI перегрузкой операторов пользовались?
C++
1
2
3
4
5
6
7
8
 hwndList = CreateWindow (TEXT ("listbox"), NULL,
                              WS_CHILD | WS_VISIBLE | LBS_STANDARD,
                              cxChar, cyChar * 3,
                              cxChar * 16 + GetSystemMetrics (SM_CXVSCROLL),
                              cyChar * 5,
                              hwnd, (HMENU) ID_LIST,
                              (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                              NULL) ;
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 15:22     Параметры функции и их считывание #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Helldrg, там скорее всего вообще сделано по типу:
C++
1
2
3
#define WS_CHILD 0x1
#define WS_VISIBLE 0x2
#define LBS_STANDARD 0x4
тогда не нужно ничего перегружать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MyClass(int _value)
    {
        if (_value & WS_CHILD)
        {
            std::cout << "WS_CHILD\n";
        }
        if (_value & WS_VISIBLE)
        {
            std::cout << "WS_VISIBLE\n";
        }
        if (_value & LBS_STANDARD)
        {
            std::cout << "LBS_STANDARD\n";
        }
    }
Helldrg
54 / 54 / 1
Регистрация: 10.01.2011
Сообщений: 1,080
13.07.2015, 15:36  [ТС]     Параметры функции и их считывание #8
sashatref
Спасибо большое! То что надо
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 15:38     Параметры функции и их считывание #9
Helldrg, главное помнить, что значение enum должны быть кратны степеням двойки, т.е :
C++
1
2
3
4
5
6
7
8
9
enum State
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 4,
    Value4 = 8,
    Value5 = 16
//....
};
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
13.07.2015, 16:42     Параметры функции и их считывание #10
Цитата Сообщение от sashatref Посмотреть сообщение
главное помнить, что значение enum должны быть кратны степеням двойки
Бред.
C++
enum e{ some=33, someElse };
cout << someElse;
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
13.07.2015, 16:45     Параметры функции и их считывание #11
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Бред.
я имею ввиду, чтобы адекватно использовать флаги.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
14.07.2015, 08:31     Параметры функции и их считывание #12
Цитата Сообщение от sashatref Посмотреть сообщение
я имею ввиду, чтобы адекватно использовать флаги.
Слово "адекватно" здесь неуместно. Если только "чтобы как-то похитрому использовать флаги".
sashatref
75 / 75 / 27
Регистрация: 21.05.2015
Сообщений: 257
Завершенные тесты: 1
14.07.2015, 08:39     Параметры функции и их считывание #13
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Слово "адекватно" здесь неуместно. Если только "чтобы как-то похитрому использовать флаги".
Тогда продемонстрируйте, как "адекватно" реализовать флаги на чистом c++?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
14.07.2015, 08:53     Параметры функции и их считывание #14
sashatref, пардоньте, с первого раза до меня не дошло, что речь идет про использование перечисления как флагов. Все правильно вы говорите.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 09:01     Параметры функции и их считывание
Еще ссылки по теме:

C++ Параметры по умолчанию в функции
Параметры функции C++
C++ Функции и процедуры и их параметры

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

Или воспользуйтесь поиском по форуму:
Pancir
 Аватар для Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
14.07.2015, 09:01     Параметры функции и их считывание #15
Так задавать значения более удобно ИМХО.
А так же не стоит забывать о типах которые используются для хранения флагов, enum например 32 битный int (если не задано другое) и больше 32 флагов содержать не может.
C++
1
2
3
4
5
6
7
8
9
10
enum State
{
    Value0 = 1 << 0,
    Value1 = 1 << 1,
    Value2 = 1 << 2,
    Value3 = 1 << 3,
    Value4 = 1 << 4,
    /* ... */
    Value31 = 1 << 31,
};
Yandex
Объявления
14.07.2015, 09:01     Параметры функции и их считывание
Ответ Создать тему
Опции темы

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