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

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

Восстановить пароль Регистрация
 
SandWraith
 Аватар для SandWraith
187 / 187 / 13
Регистрация: 11.04.2009
Сообщений: 497
Завершенные тесты: 2
29.03.2011, 11:51     Перегрузка оператора << #1
Здравствуйте!

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

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

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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 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
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.03.2011, 12:56     Перегрузка оператора << #3
SandWraith, не рекомендуется использовать имена переменные начинающиеся со знака подчеркивания. Я что-то никак смысла оператора << в Вашем случае не улавливаю. Он должен просто вывести значения полей двух объектов и вернуть первый?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
1283 / 1217 / 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     Перегрузка оператора <<
Ответ Создать тему
Опции темы

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