Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/48: Рейтинг темы: голосов - 48, средняя оценка - 4.60
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
1

Cout объект?

17.08.2019, 11:32. Показов 9359. Ответов 23
Метки нет (Все метки)

привет!


C++
1
2
3
4
5
6
7
8
class exem{
public:
 
 
int a=11;
std::cout << a << "\n";
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ex{
 
 
public:
 
int a=10;
 
ex(){
 
std::cout << a << "\n";
 
 
}
 
 
int main(){
 
ex obj; //  тут при создании объекта будет вызван конструктор , в котором отработает std::cout << "a";
return 0;
}
не могу понять, cout -это что? объект? функция, метод?

почему в если я попытаюсь создать объект класса exem , компилятор будет ругаться?

то есть
C++
1
2
3
4
int main(){
exem obj;
return 0;
}
почему std::cout << может работать только в методе или конструкторе класса?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2019, 11:32
Ответы с готовыми решениями:

cout и объект класса
Здравствуйте, форумчане. Есть класс, который реализует список. Необходимо, чтобы при записи...

При компиляции объект cout выводит ноль
Подскажите, что изменить в проге, чтоб ноль не выводился? #include &lt;conio.h&gt; #include...

Нюансы ввода/вывода в Си и C++ (функция printf() и объект std::cout)
Добрый день. Интересует следующий вопрос: каким именно образом работает команда форматирование...

Cout <<endl; Что это значит? Если ничего нету в cout?
Здравствуйте ! Обьясните пожалуйста что значит cout &lt;&lt;endl; если он используется после цикла...

23
101 / 246 / 10
Регистрация: 21.06.2019
Сообщений: 1,422
17.08.2019, 11:50 2
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

cout - объект класса std::ostream, cout << - вызов перегруженного оператора <<.
2
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
17.08.2019, 12:24  [ТС] 3
Цитата Сообщение от Катафалк Посмотреть сообщение
cout << - вызов перегруженного оператора <<.

не понял
0
101 / 246 / 10
Регистрация: 21.06.2019
Сообщений: 1,422
17.08.2019, 12:34 4
Цитата Сообщение от pcmax Посмотреть сообщение
не понял
Если не понял, значит читай про перегрузку операторов с C++. По сути это обычный вызов функции, просто записанный в виде бинарного оператора.
0
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
17.08.2019, 13:08  [ТС] 5
извините, но тут как -то все в куче.... метод, функция и объект, -это совершенно разные понятия. и что же cout? он все же объект, или функция или метод? и почему cout работает только конструкторе или методе класса?


C++
1
2
3
4
5
6
7
8
9
10
class exem{
public:
 
 
int a=11;
std::cout << a << "\n";
 
};
 
вот так работать не будет. почему? ведь cout -это метод как заявляли
0
Don't worry, be happy
17142 / 10019 / 1933
Регистрация: 27.09.2012
Сообщений: 24,944
Записей в блоге: 1
17.08.2019, 13:13 6
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
вот так работать не будет. почему?
Точно по той же причине, по которой не будет работать
C++
1
2
3
4
5
int x;
struct ex
{
    x *= x;
};
Цитата Сообщение от pcmax Посмотреть сообщение
ведь cout -это метод как заявляли
Где?
1
101 / 246 / 10
Регистрация: 21.06.2019
Сообщений: 1,422
17.08.2019, 13:14 7
Я ж написал, cout это объект класса ostream. Так работать не будет, потому что cout << a - это вызов функции, а в этом месте в классе вызовы функций недопустимы.
1
2718 / 1883 / 558
Регистрация: 05.06.2014
Сообщений: 5,489
17.08.2019, 13:28 8
Цитата Сообщение от pcmax Посмотреть сообщение
не могу понять, cout -это что? объект? функция, метод?
cout<<что-то там=cout.operator<<(что-то там).
1
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
17.08.2019, 18:21  [ТС] 9
Цитата Сообщение от Катафалк Посмотреть сообщение
Так работать не будет, потому что cout << a - это вызов функции, а в этом месте в классе вызовы функций недопустимы.
скажите пожалуйста, а функция может быть объектом класса?

Добавлено через 37 секунд
Цитата Сообщение от Renji Посмотреть сообщение
cout<<что-то там=cout.operator<<(что-то там)

продублирую вопрос.... может ли функция быть объектом класса?
0
2718 / 1883 / 558
Регистрация: 05.06.2014
Сообщений: 5,489
17.08.2019, 18:29 10
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
скажите пожалуйста, а функция может быть объектом класса?
Может. Называется std::function. Если, конечно, я правильно понял о чем вы.

Добавлено через 4 минуты
UPD А, стоп, вам, наверно, нужен функтор попроще.
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Function
{
public:
    void operator()(int x){std::cout<<x<<std::endl;}
};
Function function;
 
int main()
{
    function(1);
    return 0;
}
1
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
17.08.2019, 19:46  [ТС] 11
Цитата Сообщение от Renji Посмотреть сообщение
Может

может так поймем друг друга...

cout-это функция, которая является объектом класса? так?

я делаю такие заключения из всего что написано выше
0
2718 / 1883 / 558
Регистрация: 05.06.2014
Сообщений: 5,489
17.08.2019, 19:49 12
Цитата Сообщение от pcmax Посмотреть сообщение
cout-это функция, которая является объектом класса? так?
Функцией обычно называют то, что вызывается через имя(список аргументов). cout это объект у которого на оператор битового сдвига повесили печать текста. Да, возможно это было не самое логичное решение. В любом случае, за функтор это обычно не считается.
1
101 / 246 / 10
Регистрация: 21.06.2019
Сообщений: 1,422
17.08.2019, 19:59 13
Цитата Сообщение от pcmax Посмотреть сообщение
cout-это функция, которая является объектом класса?
Нет. cout - это объект класса ostream. А << - это оператор, определенный в классе ostream. Ты же умеешь в классе методы определять? Вот, грубо говоря, это обычный метод класса, только вызов его записывается виде cout << a, а не cout.<<(a), как происходит с обычными методами.
1
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
17.08.2019, 20:55  [ТС] 14
Цитата Сообщение от Катафалк Посмотреть сообщение
cout - это объект класса ostream

спасибо

уже более понятно....

скажите пожалуйста Уважаемый катафалк, а можно ли как-нибудь через this вызвать этот метод в другом методе? ведь this это указатель на объект, который вызвает метод класса....

то есть можно ли функцию cout вызвать в классе через this? или иным способом?
0
Модератор
1637 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,342
17.08.2019, 21:21 15
1) cout это объект

2) Но когда мы пишем cout << 123 это очень грубо можно считать как someOutputFunction(cout, 123). Это упрощенно, чтоб было более понятно. Т.е cout << 123 это по сути как обычный вызов функции, но это не значит что cout функция! cout объект. Но чтобы им пользоваться нужно использовать оператор << который по сути ведет себя как обычная функция, только запись другая. От этого cout не перестает быть объектом.

Цитата Сообщение от pcmax Посмотреть сообщение
почему std::cout << может работать только в методе или конструкторе класса?
Вызывать функцию можно только внутри другой функции. Да и как бы оно должно было работать если б прям в классе можно было вызывать функции ?
1
408 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,140
17.08.2019, 22:22  [ТС] 16
ну не знаю.... может конструктор по умолчанию мог бы вызывать cout << , где "<<" ведет себя как обычная функция. конструктор умеет это делать. прошла бы инициализация полей, дошло бы дело до cout << и конструктор по умолчанию вызвал бы эту << как бы функцию.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
 
 
class foo{
public:
 
int a=10;
foo(){
 
std::cout << a;
}
 
};
 
 
int main(){
foo obj;
0
Don't worry, be happy
17142 / 10019 / 1933
Регистрация: 27.09.2012
Сообщений: 24,944
Записей в блоге: 1
17.08.2019, 22:38 17
pcmax, ты где этой жести нахватался?
1
nd2
3415 / 2795 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
17.08.2019, 22:59 18
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
ну не знаю.... может конструктор по умолчанию мог бы вызывать cout << , где "<<" ведет себя как обычная функция. конструктор умеет это делать. прошла бы инициализация полей, дошло бы дело до cout << и конструктор по умолчанию вызвал бы эту << как бы функцию.
pcmax, в объекте класса нет никаких функций, только данные, под эти данные выделяется память и эти данные инициализирует конструктор. Сами функции класса являются общими для всех объектов класса и не являются частью объектов.
1
зомбяк
1531 / 1176 / 332
Регистрация: 14.05.2017
Сообщений: 3,815
17.08.2019, 23:23 19
Цитата Сообщение от pcmax Посмотреть сообщение
может конструктор по умолчанию мог бы вызывать cout
cout - это уже готовый глобальный объект, имеющий тип std::ostream и объявленный в заголовочных файлах iostream.h (или возможно во включенных в него, не важно).

Далее. Если у тебя в коде есть y = x+1; то скажи, + - это функция, метод, класс?

Правильный ответ - оператор. Это подвид функции, который может записываться в специальном виде, удобном для записи математических выражений. То же самое и <<. Изначально (в С) он предназначался только для математической операции "переставить биты в числе на столько-то разрядов влево". Но в С++ ему для объектов типа std::ostream добавили новый функционал - "вписать в поток вывода такие-то данные". И всё. Если очень захочется, можешь везде писать его в форме функции, как в посте у Renji. Но это банально длиннее.

Добавлено через 4 минуты
Т.е.
C++
1
cout.operator<<(a);
1
Комп_Оратор)
Эксперт по математике/физике
8719 / 4425 / 598
Регистрация: 04.12.2011
Сообщений: 13,256
Записей в блоге: 16
18.08.2019, 09:53 20
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

pcmax, вам говорят на разные лады, но вы просто ищете способ не понять. Что же, - у каждого свой путь. Главное не останавливаться. И поворачивать когда нужно.
Тело класса это перечень объявлений и определений (иногда). Все вычисления в теле непосредственно, связаны с определением. Вот вам примерчик. Если он сделает вас счастливее, значит он не в тему. Лучше если он поможет понять. А знание умножает скорбь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
struct SCout
{
    ostream& os = cout << "Hello Scout! " << ++counter_sc << endl ;
    static size_t counter_sc;
};
size_t SCout::counter_sc;
int main()
{
    SCout sc1, sc2, sc3;
 
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2019, 09:53

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Инкремент и объект "cout"
Всем привет. Столкнулся с такой непоняткой: int j=5; while (j++ &lt; 9) cout &lt;&lt; j++ &lt;&lt;...

Подскажите почему после первого cout программа не останавливается для ввода строки, а выводит второй cout
Подскажите почему после первого cout программа не останавливается для ввода строки, а выводит...

Разница между fwrite, cout и cout.write
Привет. Пытаюсь вывести букву 'ф' в консоль Windows 7, используя кодировку UTF-8. Для этого...

В чем разница std::cout и просто cout?
Ребят ,подскажите на простом языке для чайников . В чем разница std::cout и просто cout?


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

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

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