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

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

Войти
Регистрация
Восстановить пароль
 
SandWraith
 Аватар для SandWraith
187 / 187 / 13
Регистрация: 11.04.2009
Сообщений: 497
Завершенные тесты: 2
#1

Перегрузка оператора << - C++

29.03.2011, 11:51. Просмотров 772. Ответов 5
Метки нет (Все метки)

Здравствуйте!

Подскажите, пожалуйста, как выполнить перегрузку оператора <<?

Для двух классов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class A
{
public:
int i;
A(int _i) { i=_i;};
};
 
class B
{
public:
int i;
B(int _i) { i=_i;};
};
Вот такой вариант работает корректно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
A& operator<<(A& a, const B& b) {
    cout << "Operator '<<': a = " << a.i << " b = " << b.i << endl;
        return a;
};
 
int main()
{
 
A _a(0);
B _b(1);
 
A result = _a << _b;
Но мне необходимо обойтись без определения перменных _a и _b, было бы удобнее сразу вызывать конструктор:

C++
1
A result2 = A(3) << B(4);
objects.cpp: In function `int main()':
objects.cpp:148: no match for `A << B' operator
objects.cpp:135: candidates are: A& operator<<(A&, const B&)
Возможно ли привести объект к ссылке?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2011, 11:51     Перегрузка оператора <<
Посмотрите здесь:

C++ Перегрузка оператора +
перегрузка оператора C++
Перегрузка оператора () C++
C++ Перегрузка оператора
C++ Перегрузка оператора ++
перегрузка оператора () C++
C++ Перегрузка оператора ()
Перегрузка оператора C++
C++ Перегрузка оператора
Перегрузка оператора = C++
Перегрузка оператора '=' C++
C++ Перегрузка оператора

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
29.03.2011, 12:50     Перегрузка оператора << #2
C++
1
2
3
4
A operator<<(const A& a, const B& b) {
  printf("Operator '<<': a = %d, b = %d\n", a.i, b.i);
  return a;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.03.2011, 12:56     Перегрузка оператора << #3
SandWraith, не рекомендуется использовать имена переменные начинающиеся со знака подчеркивания. Я что-то никак смысла оператора << в Вашем случае не улавливаю. Он должен просто вывести значения полей двух объектов и вернуть первый?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 13:07     Перегрузка оператора << #4
Подозреваю, что речь идёт о перегрузки operator << для вывода объекта в поток. То, что приведено в коде, не есть перегрузка operator << для вывода в поток. Там - чушь.

C++
1
2
3
4
5
std::ostream& operator<<( std::ostream& out, const A& a)
 {
        out << a.i;
        return out;
};
Аналогично для B.
SandWraith
 Аватар для SandWraith
187 / 187 / 13
Регистрация: 11.04.2009
Сообщений: 497
Завершенные тесты: 2
29.03.2011, 13:47  [ТС]     Перегрузка оператора << #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Подозреваю, что речь идёт о перегрузки operator << для вывода объекта в поток. То, что приведено в коде, не есть перегрузка operator << для вывода в поток. Там - чушь.
Не есть, и не должно быть. Если бы речь шла о потоке, то так и было бы написано.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 13:54     Перегрузка оператора << #6
Извиняюсь, но ЭТО
C++
1
2
3
4
A& operator<<(A& a, const B& b) {
        cout << "Operator '<<': a = " << a.i << " b = " << b.i << endl;
        return a;
};
просто
Yandex
Объявления
29.03.2011, 13:54     Перегрузка оператора <<
Ответ Создать тему
Опции темы

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