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

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

Войти
Регистрация
Восстановить пароль
 
 
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
#1

Можно ли каким-то образом наследовать тип bool - C++

02.05.2014, 01:27. Просмотров 989. Ответов 21
Метки нет (Все метки)

Здраствуйте, можно ли каким то образом наследовать тип bool
типо что бы 1 - man
типо что бы 0 - woman

что то в таком роде:
C++
1
class man_woman: public bool

да ток что бы методы cin и cout корректно выводили строки , а не 1 или 0
как в boolalpha
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 01:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли каким-то образом наследовать тип bool (C++):

Можно ли сделать бесконечный цикл с while, используя тип bool? - C++
... bool f; f=false; while(f=false) { ... ... ... if(....)//какое-то условие f=true;//цикл прерывается

Каким образом можно сделать выключение компютера С++ - C++
Появилась идея сделать интересную программу. Всё уже продумал кроме выключения ПК. То есть каким образом заставить ПК выключится после...

Каким образом можно записать стек и очередь в дек - C++
Прошу помощи. Есть программа создания стека и очереди с динамическим распределением памяти. Каким образом их можно записать в дек?Заранее...

как правильно понять тип bool ? bool true(const string &str) и что дает это значение ? - C++
задам может глупый вопрос, но прошу ответить. как правильно понять тип bool ? bool true(const string &str) и что дает это...

Можно ли в С++ создать матрицу, строки которой имеют разный тип (например, 1-я строка - bool, 2-я - char)? - C++
:p Привет всем. У меня такой вот "тупой" вопрос. Можно ли в С++ создать матрицу например 2 на 8 где первая строка имеет тип bool а вторая...

Массив: каким образом можно изменить размер многомерного массива - C++
Я на 100% уверен что вопрос неоднократно поднимался до меня, поэтому заранее прошу прощения за эту тему.. Я просто ни как не могу найти...

21
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 15:11  [ТС] #16
Цитата Сообщение от 0x10 Посмотреть сообщение
Что важно: в случае ошибки при чтении содержимое потока должно остаться таким же, каким было до попытки чтения. Т.е. если извлекли из потока данные, определили, что они невалидные, их нужно положить обратно. При этом не забыть выставить флаг failbit.
Как осуществить операцию положить обратно???
0
0x10
2508 / 1686 / 253
Регистрация: 24.11.2012
Сообщений: 4,221
02.05.2014, 15:12 #17
Цитата Сообщение от eXPonent Посмотреть сообщение
Как осуществить операцию положить обратно???
Выше как раз ссылка на этот пример. Еще вариант - http://www.cplusplus.com/reference/istream/istream/putback/
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
03.05.2014, 11:13  [ТС] #18
Что делать с потоком потом если установить failbit

Добавлено через 21 секунду
???

Добавлено через 7 минут
Как из потока выкинуть символы разделители

Добавлено через 13 часов 16 минут
Как обработать данный оператор с помощью обработчика исключений?

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
52
53
54
istream& operator>>(istream &in, Gender &G)
{
    char c;
    do
        c = cin.get();
    while(c == ' ' || c == '\n');
 
    if(c == '0' || c == '1' || c == 'M' || c == 'W')
    {
        if(c == '0' || c == '1') 
        {
            cin.putback(c);
            int t;
            cin >> t;
            if(t == 0 || t == 1)
            {
                if(t == 0)
                    G = Woman;
                if(t == 1)
                    G = Man;
            }
            else
                cout << "Error";
        };
 
        if(c == 'M')
        {
            cin.putback(c);
            string S;
            getline(cin, S);
            if(S == "M" || S == "Man")
                G = Man;
            else
                cout << "Error";
        };
 
        if(c == 'W')
        {
            cin.putback(c);
            string S;
            getline(cin, S);
            if(S == "W" || S == "Woman")
                G = Woman;
            else
                cout << "Error";
        };
    }
    else
    {
        cout << "Error";
    };
 
    return in;
};
что сделать после установки failbit?
0
0x10
2508 / 1686 / 253
Регистрация: 24.11.2012
Сообщений: 4,221
03.05.2014, 11:19 #19
Страшное дело)
Цитата Сообщение от eXPonent Посмотреть сообщение
Как из потока выкинуть символы разделители
Видимо, посимвольно выгребать. peek + getc.
Цитата Сообщение от eXPonent Посмотреть сообщение
Что делать с потоком потом если установить failbit
Уже ничего. По идее, установка флага ошибки - это последнее действие перед возвратом из функции.
Цитата Сообщение от eXPonent Посмотреть сообщение
Как обработать данный оператор с помощью обработчика исключений?
Просто так функции работы с потоками исключений кидать не будут, это нужно указать явно. Начать читать можно отсюда - http://www.cplusplus.com/reference/ios/ios/exceptions/

Как я уже сказал выше, с продвинутым и правильным во все поля чтением из стандартных потоков мне работать не приходилось, так что мои навыки тут сводятся к чтению документации. Кастую в тред кого-нибудь, кто на этом собаку съел.
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
03.05.2014, 12:44  [ТС] #20
Окончательный вариант:

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
52
53
54
55
56
57
istream& operator>>(istream &in, Gender &G)
{
    try
    {
 
        char c;
        do
            c = cin.get();
        while(c == ' ' || c == '\n');
    
        if(c == '0' || c == '1' || c == 'M' || c == 'W')
        {
            if(c == '0' || c == '1') 
            {
                cin.putback(c);
                long long t;
                cin >> t;
                if(t == 0 || t == 1)
                    G = (Gender) t;
                else
                    throw to_string(t);
            };
    
            if(c == 'M' || c == 'W')
            {
                cin.putback(c);
                string S;
                getline(cin, S);
                if(S == "M" || S == "Man" || S == "W" || S == "Woman")
                {
                    if(S == "M" || S == "Man")
                        G = Man;
                    if(S == "W" || S == "Woman")
                        G = Woman;
                }
                else
                    throw S;
            };
 
        }
        else
        {
            cin.putback(c);
            string S;
            getline(cin, S);
            throw S;
        };
 
    }
    catch (string S) 
    {
        cout << "Error reading: " << S << endl << "The input buffer is cleared and Failbit set" << endl;
        // Установить Failbit
    };
 
    return in;
};
Как установить Failbit
0
0x10
2508 / 1686 / 253
Регистрация: 24.11.2012
Сообщений: 4,221
03.05.2014, 13:00 #21
http://www.cplusplus.com/reference/ios/ios/setstate/
0
eXPonent
99 / 52 / 2
Регистрация: 21.05.2012
Сообщений: 1,170
03.05.2014, 13:18  [ТС] #22
Читал, но как написать так и не понял, сомневаюсь сильно

Добавлено через 5 минут
Я же даже пометил в каком месте нужно установить FailBit

Добавлено через 7 минут
Установил
C++
1
in.setstate(ios::failbit);
Добавлено через 30 секунд
0x10, большое спасибо за помощь
0
03.05.2014, 13:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 13:18
Привет! Вот еще темы с ответами:

C++ std::regex каким образом можно вывести все совпадения? - C++
Работаю в Visual Studio 2012. Каким образом я могу получить значения всех совпадений? Ищу так: std::string input; std::regex...

Каким образом можно осуществить загрузку файла из интернета по url ? - C++
Каким образом можно осуществить загрузку файла из интернета по url ? Мне бы хотелось конечно увидеть пример кода готовой программы, но...

Каким образом можно использовать регулярное выражение regex из .NET под С++ - C++
Работаю в VS Express 2012. Насколько понимаю, эта библиотека должна подключаться и к проекту на С++, но как это сделать, чтобы не надо...

Найти площадь самого большого треугольника. Каким образом можно использовать 1 цикл? - C++
Каким образом можно использовать 1 цикл? // Даны 2 массива. Рассматривая пары значений (a1,b1 ; ... ; an,bn) как координаты точек...


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

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

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