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

Прегрузки - C++

Восстановить пароль Регистрация
 
Димиан
1 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 54
07.04.2011, 13:34     Прегрузки #1
Создать класс Bool – логические переменные. Определить операторы "+" – логическое ИЛИ, "*" – логическое И "^" – ИСКЛЮЧИТЕЛЬНОЕ ИЛИ, как дружественные функции, а операторы "==" и "!=" как методы класса. Операторы должны позволять осуществления операций, как с переменными данного класса, так и с переменными встроенного int. (Если целое число отлично от нуля, считается что переменная истинна, в противном случае ложна.)

Перегрузки не могу сделать HELP
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2011, 13:34     Прегрузки
Посмотрите здесь:

ошибка при прегрузки оператора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.04.2011, 14:27     Прегрузки #2
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
 
class Bool
{
    enum value
    {
        FALSE,
        TRUE
    };
 
public:
    Bool(int bool_value = 0):
    _bool_value(bool_value == 0 ? FALSE : TRUE)
    {
    }
 
    friend Bool operator+(const Bool &, const Bool &);
    friend Bool operator*(const Bool &, const Bool &);
    friend Bool operator^(const Bool &, const Bool &);
 
    Bool operator==(const Bool &right) const
    {
        return _bool_value == right._bool_value ? Bool (1) : Bool (0);
    }
 
    Bool operator!=(const Bool &right) const
    {
        return _bool_value == right._bool_value ? Bool (0) : Bool (1);
    }
 
    friend std::ostream &operator<<(std::ostream &, const Bool &);
 
private:
    value _bool_value;
};
 
Bool operator+(const Bool &left, const Bool &right)
{
    return (left._bool_value == Bool::TRUE || right._bool_value == Bool::TRUE) ? Bool (1) : Bool (0);
}
 
Bool operator*(const Bool &left, const Bool &right)
{
    return (left._bool_value == Bool::TRUE && right._bool_value == Bool::TRUE) ? Bool (1) : Bool (0);
}
 
Bool operator^(const Bool &left, const Bool &right)
{
    return left._bool_value == right._bool_value ? Bool (0) : Bool (1);
}
 
std::ostream &operator<<(std::ostream &left, const Bool &right)
{
    return left << right._bool_value;
}
 
int main()
{
    Bool bval1(1);
    Bool bval2;
 
    std::cout << (bval1 + bval2) << std::endl;
    std::cout << (bval1 * bval2) << std::endl;
    std::cout << (bval1 ^ bval2) << std::endl;
    std::cout << (bval1 == bval2) << std::endl;
    std::cout << (bval1 != bval2) << std::endl;
 
    std::cout << (bval1 + 1) << std::endl;
    std::cout << (bval1 * 2) << std::endl;
    std::cout << (bval1 ^ 3) << std::endl;
    std::cout << (bval1 == 4) << std::endl;
    std::cout << (bval1 != 5) << std::endl;
 
    std::cout << (0 + bval2) << std::endl;
    std::cout << (0 * bval2) << std::endl;
    std::cout << (0 ^ bval2) << std::endl;
 
    return 0;
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 14:40     Прегрузки #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
enum value { FALSE, TRUE };
Сомневаюсь, что скомпилируется. Препроцессор заменит их на 0 и 1.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.04.2011, 14:44     Прегрузки #4
Deviaphan, MSVS2010 спокойно компилирует.

Добавлено через 1 минуту
Да и не очень понятно, при чём тут препроцессор... Это же не макросы. Или нет?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 14:51     Прегрузки #5
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это же не макросы. Или нет?
TRUE и FALSE это макросы. Препроцессор их подменяет перед компиляцией.
Возможно, их определения просто в программе нету.)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.04.2011, 14:56     Прегрузки #6
Вы имеете ввиду, что они определены где-то ещё? Да, я об этом не подумал, но это вроде как в сях актуально было, следовательно, в сишных заголовках эти определения и лежат. На крайний случай можно заменить их на BOOL_TRUE и BOOL_FALSE, например.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 15:05     Прегрузки #7
Для С++ тоже актуально. Вернее, для WinAPI.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.04.2011, 15:05     Прегрузки #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сомневаюсь, что скомпилируется.
Прочь сомнения!
Код
andrew@rd-andrew ~/cpp/other
$ g++ -o silent_bool silent_bool.cpp
silent_bool.cpp:79:2: warning: no newline at end of file

andrew@rd-andrew ~/cpp/other
$ ./silent_bool
1
0
1
0
1
1
1
0
1
0
0
0
0

andrew@rd-andrew ~/cpp/other
$
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
07.04.2011, 16:20     Прегрузки #9
Цитата Сообщение от Deviaphan Посмотреть сообщение
Вернее, для WinAPI
если я не ошибаюсь, то это только для WinAPI и актуально (насколько я знаю, эти макроси ни для стандартного С, ни для С++ не описаны). Тока с каких пор WinAPI относится к С++, я не знаю
Yandex
Объявления
07.04.2011, 16:20     Прегрузки
Ответ Создать тему
Опции темы

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