С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
antiscaliger
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 6
1

Конструктор в качестве параметра operator<<

30.12.2016, 16:39. Просмотров 230. Ответов 12
Метки нет (Все метки)

Подскажите как правильно перегрузить operator<<
чтобы в поток выводить явновызываемый конструктор класса.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2016, 16:39
Ответы с готовыми решениями:

Неверное значение при передаче параметра в метод operator=
Здравствуйте. Есть код vector.h #pragma once //#include &quot;vector.h&quot;

Функция в качестве параметра
Я не знаю, как передать функцию в качестве параметра. При обработке программа...

Структура в качестве параметра шаблона
Добрый день, возник вопрос при выполнении КР по программированию: Можно ли...

Передача файла в качестве параметра
Как, в качестве параметра, передать функции файл и структуру??? Добавлено...

Передача функции в качестве параметра
Как передать функцию с параметрами в transform? Т.е., например, мне надо из...

12
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 16:45 2
Цитата Сообщение от antiscaliger Посмотреть сообщение
чтобы в поток выводить явновызываемый конструктор класса.
Конструктор - это функция, её нельзя в поток вывести.
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
30.12.2016, 16:48 3
Возможно, что что-то такое имеется ввиду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct A
{
    A() : n(123) {}
    int n;
};
 
std::ostream& operator<<(std::ostream& strm, const A& a)
{
    strm << a.n;
    return strm;
}
 
int main()
{
    std::cout << "Hello, world!\n" << A() << "\n";
}
1
antiscaliger
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 6
30.12.2016, 17:20  [ТС] 4
Какая ошибка в вызове конструктор?:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
enum class W {A, B, C}; 
class KL {
W a; int b; int c;
public:
KL(): a(W::B), b(0), c(5) {}
};
 
ostream &operator<<(ostream &outs, KL &kk)
{ outs <<"ok";
  return outs; }
 
int main()
{
cout << KL {W::A, 5, 10};
return 0;
}
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
30.12.2016, 17:27 5
Цитата Сообщение от antiscaliger Посмотреть сообщение
Какая ошибка в вызове конструктор?
В operator<< надо передавать константную ссылку на объект, только тогда возможна передача временного объекта. Есть, конечно, ещё rvalue-ссылки, но вам, думаю, ещё рано про них знать. И да, вы в конструтор передаёте параметры в то время, как у вас определен только конструктор без параметров.
1
antiscaliger
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 6
30.12.2016, 17:49  [ТС] 6
Спасибо, но теперь я не могу вывести в поток значение b:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
enum class W {A, B, C}; 
 
class KL {
W a; int b; int c;
public:
KL(): a(W::B), b(0), c(5) {}
KL(W ww, int aa, int bb) {}
int getb() {return b;}
};
 
ostream &operator<<(ostream &outs, const KL &kk)
{ outs <<kk.getb();
  return outs; }
 
int main()
{
cout << KL {W::A, 5, 10};
return 0;
}
0
nd2
2838 / 2405 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
30.12.2016, 17:52 7
Цитата Сообщение от antiscaliger Посмотреть сообщение
но теперь я не могу вывести в поток значение b:
Ты, в этом конструкторе, b инициализируешь?
Цитата Сообщение от antiscaliger Посмотреть сообщение
C++
1
KL(W ww, int aa, int bb) {}
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
30.12.2016, 17:53 8
Цитата Сообщение от antiscaliger Посмотреть сообщение
не могу вывести в поток значение b
Перепишите так.
C++
1
KL(W ww, int aa, int bb) : a(ww), b(aa), c(bb) {}
1
antiscaliger
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 6
30.12.2016, 18:04  [ТС] 9
Цитата Сообщение от GbaLog- Посмотреть сообщение
Перепишите так.
C++
1
KL(W ww, int aa, int bb) : a(ww), b(aa), c(bb) {}
Добавил. Все равно программа не компилируется:

main.cpp:15:18: error: passing 'const KL' as 'this' argument discards qualifiers [-fpermissive]
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
30.12.2016, 18:19 10
Цитата Сообщение от antiscaliger Посмотреть сообщение
Все равно программа не компилируется
Заменить:
C++
1
int getb() {return b;}
На:
C++
1
int getb() const {return b;}
1
antiscaliger
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 6
30.12.2016, 18:22  [ТС] 11
Передаю значение b в конструктор.
Ошибка в перегруженном операторе<<.

Добавлено через 1 минуту
Благодарю!
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
30.12.2016, 18:22 12
Цитата Сообщение от antiscaliger Посмотреть сообщение
Передаю значение b в конструктор.
Что за b?
Код покажите!
0
antiscaliger
0 / 0 / 0
Регистрация: 30.12.2016
Сообщений: 6
30.12.2016, 18:24  [ТС] 13
Последний Ваш совет помог, благодарю!
0
30.12.2016, 18:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2016, 18:24

Передача функции в качестве параметра
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double...

Передать функцию в качестве параметра
Нужно передать функцию func в качестве параметра для функции palindrom. Как это...

Передача CString в качестве параметра функции
Добрый всем вечер! Мучает один вопрос, на который не могу найти ответ. Как...


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

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

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