Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170

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

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

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

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

да ток что бы методы cin и cout корректно выводили строки , а не 1 или 0
как в boolalpha
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2014, 01:27
Ответы с готовыми решениями:

почему $_FILES не всегда определяет тип файла? каким образом можно определить тип в 100% случаях?
почему $_FILES не всегда определяет тип файла? каким образом можно определить тип в 100% случаях?

Каким образом тип значений взаимодействует с ссылочным типом
// Реализовать интерфейсы IEnumerable и IEnumerator. using System; using System.Collections; class MyClass : IEnumerator,...

Можно ли использовать DAO вместо Ado и если Можно то каким образом?
Люди!!!Можно ли использовать DAO вместо Ado и если Можно то каким образом!Спасибо

21
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
02.05.2014, 02:36
eXPonent, наследовать можно только class type.
Почему бы просто не определить для этого типа operator>> и operator<<, которые будут выводить то, что нужно?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 06:28
Если очень хочется впихнуть наследование, то можно так:
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
#include <iostream>
 
enum class Gender : bool
{
    Woman,
    Man
};
 
std::ostream& operator<<(std::ostream& os, Gender g)
{
    switch (g)
    {
    case Gender::Woman:
        os << "Woman";
        break;
        
    case Gender::Man:
        os << "Man";
        break;
    }
    
    return os;
}
 
 
int main()
{
    std::cout << Gender::Man << std::endl
        << Gender::Woman << std::endl;
        
    return 0;
}
http://ideone.com/O5GAnY

Ну и оператор можно перегрузить для обычного enum. Если C++11 использовать нельзя, а сэкономить на спичках ну очень хочется, у gcc есть флаг short-enums, который заставляет компилятор использовать для перечислений минимально возможный размер. Но тут нужно осторожно - в этом случае все компоненты программы должны быть собраны с этим флагом, чтобы не огрести от разного выравнивания в структурах, например. Стоит ли говорить, что это только добавит головняка.
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 07:57  [ТС]
DrOffset, как определить такой тип, как экземпляр bool ?

0x10, код
C++
1
2
3
4
5
enum class Gender: bool 
{
    Woman,
    Man
};
(14): error C2332: enum: отсутствует имя тега
(14): error C2236: непредвиденные "class" "Gender". Возможно, отсутствует ";"
(14): error C3381: Gender: спецификаторы доступа к сборке доступны только в коде, скомпилированном с параметром /clr
(15): error C2062: тип "bool" не требуется
(16): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
(18): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
(18): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 08:04
eXPonent, именно по этой причине я стараюсь не забывать ссылку на ideone - чтобы было видно, что код рабочий и что необходим компилятор с поддержкой С++11, как видно по ссылке в правом верхнем углу. И ниже специально пояснил.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 08:13  [ТС]
как определить такой тип, как экземпляр bool ?
без наследования
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 08:30
Цитата Сообщение от eXPonent Посмотреть сообщение
как определить такой тип, как экземпляр bool ?
Не понимаю вопроса. Мб Вам нужен оператор приведения к bool в классе? Но учитывая контекст, это странно.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 08:37  [ТС]
Нет мне нужно что то вроде точной копии bool
только с перегруженными операторами ввода и вывода
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 08:43
А обычный enum почему не подходит?
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 08:44  [ТС]
пишу под стандартом С++10
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 08:46
Лучший ответ Сообщение было отмечено eXPonent как решение

Решение

Нет такого стандарта.
Да я же выше написал, что можно enum использовать, а не enum class:
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
#include <iostream>
 
enum Gender
{
    Woman,
    Man
};
 
std::ostream& operator<<(std::ostream& os, Gender g)
{
    switch (g)
    {
    case Woman:
        os << "Woman";
        break;
        
    case Man:
        os << "Man";
        break;
    }
    
    return os;
}
 
 
int main()
{
    std::cout
        << Man << std::endl
        << Woman << std::endl;
        
    return 0;
}
http://ideone.com/EjTJLZ
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 14:27  [ТС]
Спасибо

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
enum Gender{Woman, Man};
 
istream& operator>>(istream &in, Gender &G)
{
    // тело
    return in;
};
 
ostream& operator<<(ostream &out, Gender G)
{
    G ? out << "Man" : out << "Woman";    
    return out;
};

Как правильно организовать
C++
1
istream& operator>>(istream &in, Gender &G)


Добавлено через 20 минут
Что бы можно была вводить как
Woman и Man
Так и 1 и 0
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 14:40
Цитата Сообщение от eXPonent Посмотреть сообщение
Как правильно организовать
Это как раз та причина, по которой я не изобретаю свои форматы, а сериализую все в xml/json/boost::serialization.
Нужно парсить содержимое потока. При такой постановке - наверное, посимвольно.

Пример для одного символа: http://www.cplusplus.com/refer... eam/unget/

Что важно: в случае ошибки при чтении содержимое потока должно остаться таким же, каким было до попытки чтения. Т.е. если извлекли из потока данные, определили, что они невалидные, их нужно положить обратно. При этом не забыть выставить флаг failbit.
1
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 14:54  [ТС]
А как то можно узнать типу потока которого отправляют?
Или он всё равно идёт посимвольный
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 15:09
Не понял вопроса.
Какой тип потока?
Иерархия потоков есть тут http://www.cplusplus.com/refer... ingstream/
Содержимое потока - в любом случае байты. Другое дело - как их интерпретировать.
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
02.05.2014, 15:11  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Что важно: в случае ошибки при чтении содержимое потока должно остаться таким же, каким было до попытки чтения. Т.е. если извлекли из потока данные, определили, что они невалидные, их нужно положить обратно. При этом не забыть выставить флаг failbit.
Как осуществить операцию положить обратно???
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.05.2014, 15:12
Цитата Сообщение от eXPonent Посмотреть сообщение
Как осуществить операцию положить обратно???
Выше как раз ссылка на этот пример. Еще вариант - http://www.cplusplus.com/refer... m/putback/
0
 Аватар для eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
03.05.2014, 11:13  [ТС]
Что делать с потоком потом если установить 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
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.05.2014, 11:19
Страшное дело)
Цитата Сообщение от eXPonent Посмотреть сообщение
Как из потока выкинуть символы разделители
Видимо, посимвольно выгребать. peek + getc.
Цитата Сообщение от eXPonent Посмотреть сообщение
Что делать с потоком потом если установить failbit
Уже ничего. По идее, установка флага ошибки - это последнее действие перед возвратом из функции.
Цитата Сообщение от eXPonent Посмотреть сообщение
Как обработать данный оператор с помощью обработчика исключений?
Просто так функции работы с потоками исключений кидать не будут, это нужно указать явно. Начать читать можно отсюда - http://www.cplusplus.com/refer... xceptions/

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2014, 12:44
Помогаю со студенческими работами здесь

Можно ли каким-то образом закрыть от записи повреждённые сектора, оставив только те, с которыми можно работать?
Имеется жёсткий диск в очень плохом состоянии - Victoria показывает, что две трети диска - либо bad blocs, либо время отклика более 1,5...

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

Каким образом можно сократить if?
Добрый день, необходимо сократить if-ы. Подскажите, каким образом это можно сделать? Тело внутри у каждого if одинаково, а вот условие...

Каким образом можно получить пр 9
люди как вы думаете Каким образом можно получить пр 9 какой-то страницы которая при этом еще и не работает ...

Каким образом можно распарсить?
{&quot;ts&quot;:1624396663,&quot;updates&quot;:,]} В общем как можно распарсить все данные из массивов?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru