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

#include <iostream> Очень Подробно =) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 108, средняя оценка - 4.88
AnreyKazakov
Заблокирован
04.09.2012, 20:23     #include <iostream> Очень Подробно =) #1
Помогите пожалуйста, добрые люди Вот такая вот проблема .... искал инфу повсюду, но к сожалению она минимальна. Что такое <iostream>? В Википедии написано, что это файл, который содержит классы и функции...
1. Сразу вопрос он реально существует (такой файл) ?
2. Как язык С++ переводит команды на низкие уровни? То есть в iostream получается лежит часть компилятора, который отвечает за определенные команды или как-то еще?
3. Вырезка из Википедии <<iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно.>> Это предложение вообще для меня лишено всякого смысла, объясните, пожалуйста, понятным языком...
4. продолжение "эти объекты также являются частью стандартного пространства имён — std" Опять 25 std - это что такое, это класс чтоли, почему тогда такая странная запись идет std::cout <<"Hell World"<<std::endl; Если std не класс, зачем он нужен здесь тогда???
5. Какие у iostream есть еще классы, функции ипр.... их много? можно описать часто употребляемые, или ссылку на нормальный сайт, даже в мсн.микрософт, там такое мудреное объяснение, я честно без двух бутылок не разберусь ....
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Neon-z
46 / 41 / 1
Регистрация: 06.09.2010
Сообщений: 419
04.09.2012, 20:25     #include <iostream> Очень Подробно =) #2
Лично я тебе рекомендую начать изучение С++ с хорошей книги, где все это подробно описано.
AnreyKazakov
Заблокирован
04.09.2012, 20:29  [ТС]     #include <iostream> Очень Подробно =) #3
Ну тогда посоветуй!!! Я думал, у Страуструпа (2010г вроде книга) она самая мощная и надежная, начал с нее, но там первый же код не до С, не до С++
Вот, а про include вообще речи не идет, это типа вы и так с пеленок должны знать , о чем тут может быть речь ...
Neon-z
46 / 41 / 1
Регистрация: 06.09.2010
Сообщений: 419
04.09.2012, 20:32     #include <iostream> Очень Подробно =) #4
#include <iostream>
это значит, что ты подключаешь стандартную (то есть разработчики компилятора за тебя написали самые распространенные функции) библиотеку.
Этот файл где то лежит в папке с средой программирования, то есть, да, этот файл реально существует.

<<iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно.>> -- это значит, что с помощью данных объектов ты сможешь вывести текст на экран. Что такое потоки ввода/ввывода на таком уровне знаний не заморачивайся... знай одно
C++
1
 std::cout<<"Hellj";
выведет на экран данное слово. Более подробно - слово попадает в поток данных, которые будут системой выведены на экран.
std - это стандартная библиотека. Все стандартные функции (то есть те, которые за тебя написали разработчики компилятора) принадлежать ей. Далее, что такое "::" и прочее - это тебе учить и учить еще.
Так что начни с хорошей книги и будет тебе счастье.
Я рекомендую две книги:
С++ для чайников
Шилдт Г. - C++. Руководство для начинающих (2005)
ProgrC
 Аватар для ProgrC
9 / 9 / 1
Регистрация: 17.08.2012
Сообщений: 43
04.09.2012, 20:32     #include <iostream> Очень Подробно =) #5
Цитата Сообщение от Neon-z Посмотреть сообщение
Лично я тебе рекомендую начать изучение С++ с хорошей книги, где все это подробно описано.
Дополню лишь, что не стоит сразу забивать себе голову содержанием библиотек. На начальном этапе это не главное.

Ответ по существу. Да, такой файл реально существует, он находится в папке где лежит твоя IDE и именуется не иначе как iostream.h (.h - заголовочный файл).

Если есть желание ознакомится с его содержимым, смотри код:

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
 * Copyright (c) 1999
 * Boris Fomitchev
 *
 * This material is provided "as is", with absolutely no warranty expressed
 * or implied. Any use is at your own risk.
 *
 * Permission to use or copy this software for any purpose is hereby granted
 * without fee, provided the above notices are retained on all copies.
 * Permission to modify the code and to distribute modified code is granted,
 * provided the above notices are retained, and a notice that the code was
 * modified is included with the above copyright notice.
 *
 */
 
#ifndef _STLP_IOSTREAM_H
#define _STLP_IOSTREAM_H
 
#ifndef _STLP_OUTERMOST_HEADER_ID
#  define _STLP_OUTERMOST_HEADER_ID 0x2035
#  include <stl/_prolog.h>
#endif
 
#include <iostream>
 
// Those should be included all separately, as they do contain using declarations
#include <streambuf.h>
#include <ostream.h>
#include <istream.h>
 
#ifndef _STLP_HAS_NO_NAMESPACES
 
#  ifdef _STLP_BROKEN_USING_DIRECTIVE
_STLP_USING_NAMESPACE(stlport)
#  else
using _STLP_STD::cin;
using _STLP_STD::cout;
using _STLP_STD::clog;
using _STLP_STD::cerr;
using _STLP_STD::iostream;
#    ifndef _STLP_NO_WCHAR_T
using _STLP_STD::wcin;
using _STLP_STD::wcout;
using _STLP_STD::wclog;
using _STLP_STD::wcerr;
#    endif
#  endif
#endif /* _STLP_HAS_NO_NAMESPACES */
 
// Obsolete classes for old-style backwards compatibility
 
 
class istream_withassign : public istream {
 public:
  istream_withassign() : istream((streambuf*)0) {}
  ~istream_withassign() {}
 
  istream_withassign& operator=(istream& __s) {
    ios::init(__s.rdbuf());
    return *this;
  }
  istream_withassign& operator=(streambuf* __s) {
    ios::init(__s);
    return *this;
  }
};
 
class ostream_withassign : public ostream {
 public:
  ostream_withassign() : ostream((streambuf*)0) {}
  ~ostream_withassign() {}
 
  ostream_withassign& operator=(ostream& __s) {
    ios::init(__s.rdbuf());
    return *this;
  }
  ostream_withassign& operator=(streambuf* __s) {
    ios::init(__s);
    return *this;
  }
};
 
class iostream_withassign : public iostream {
 public:
  iostream_withassign() : iostream((streambuf*)0) {}
  ~iostream_withassign() {}
  iostream_withassign & operator=(ios& __i) {
    ios::init(__i.rdbuf());
    return *this;
  }
  iostream_withassign & operator=(streambuf* __s) {
    ios::init(__s);
    return *this;
  }
} ;
 
#if (_STLP_OUTERMOST_HEADER_ID == 0x2035)
#  include <stl/_epilog.h>
#  undef _STLP_OUTERMOST_HEADER_ID
#endif
 
#endif /* _STLP_IOSTREAM_H */
 
// Local Variables:
// mode:C++
// End:
Neon-z
46 / 41 / 1
Регистрация: 06.09.2010
Сообщений: 419
04.09.2012, 20:32     #include <iostream> Очень Подробно =) #6
Стауструпа вообще не советую. Он такой задрот, что там его книгу даже не все профи понимают.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 20:35     #include <iostream> Очень Подробно =) #7
Neon-z, Кхм. Я не советую так отзываться о создателе языка - это раз. Второе - у Страструпа есть несколько книг, одна из них для начинающих.
Neon-z
46 / 41 / 1
Регистрация: 06.09.2010
Сообщений: 419
04.09.2012, 20:39     #include <iostream> Очень Подробно =) #8
ForEveR, да я не спорю, он мужик умный, но объяснять - у него таланта нет. Это мое мнение.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.09.2012, 20:40     #include <iostream> Очень Подробно =) #9
Neon-z, А вы читали его книгу для новичков? Подозреваю, что нет. Программирование принципы и практика, если что.
ProgrC
 Аватар для ProgrC
9 / 9 / 1
Регистрация: 17.08.2012
Сообщений: 43
04.09.2012, 20:41     #include <iostream> Очень Подробно =) #10
Цитата Сообщение от ForEveR Посмотреть сообщение
одна из них для начинающих
А именно "Программирование: принципы и практика C++" которую я как раз сейчас изучаю.
Один нюанс - он настолько любит свой язык, что дает задания (первая глава) типа:
напиши не меньше 100 слов (и не больше 500), почему ты хочешь заниматься программированием...
Я понимаю, что это психологические ходы педагогического характера, но все же, мне показалось это своего рода "извращением".

Объясняет он нормально (пока добрался до 4-ой главы).
AnreyKazakov
Заблокирован
04.09.2012, 20:44  [ТС]     #include <iostream> Очень Подробно =) #11
Решил сразу несколько книг подряд читать, не знаю что из этого выйдет. Да, зачем так интересно сделали, что к std каждый раз обращаться надо....
По iostream конечно почти ничего не понял в этом коде. Да, это весь его код?????
Цитата Сообщение от ProgrC Посмотреть сообщение
0x2035
Оо это что обращение к памяти? или проста цифра в НЕдесятичной сс?
Neon-z
46 / 41 / 1
Регистрация: 06.09.2010
Сообщений: 419
04.09.2012, 20:51     #include <iostream> Очень Подробно =) #12
Это шестнадцатиричное число.
а чтобы не писать каждый раз std:: используй после инклудов using namespace std;

и вообще. По правилам форума: каждый вопрос - новая тема.

Добавлено через 5 минут
И еще.. Сразу несколько книг - я считаю это не эффективно. Прочти одну книгу, после нее еще одну. В первой книге ты что т оне понял, во второй эта непонятка исчезнет. Прочтешь пять книг - уже будет норм результат.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
04.09.2012, 21:05     #include <iostream> Очень Подробно =) #13
1. Да. Этот файл реально существует.
2. Это делает компилятор языка. В iostream лежит описание методов, а вот сами методы уже скомпилированы в динамические\статические библиотеки (libstdc++). Грубо говоря при компиляции в файл подтягивается уже существующий двоичный код методов.
3, 4, 5 - к литературе.
AnreyKazakov
Заблокирован
05.09.2012, 08:52  [ТС]     #include <iostream> Очень Подробно =) #14
По std нашел. Когда пишем std::cout мы этим самым указываем, что cout именно из стандартной библиотеки, а не еще откуда-то... И, да, как сказали выше можно использовать using namespace std;
Опять же вопрос. По книге Страуструпа...
#include <string> включает стандартный набор работы со строками. Если объявить using namespace std; то можно писать не std::string x="asdasd" , а string x="asdasd"..... Что-то я не помню когда в Borland C++ работал, чтобы подключал #include <string>, вот таких строк там точно не было using namespase std;...
Однако при объявлении переменных
String as;
AnsiString As;
никаких ошибок не вылазило, все работало. Как так?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
05.09.2012, 09:04     #include <iostream> Очень Подробно =) #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
namespace any {
    const char* foo() {
        return "namespace any";
    }
};
 
int main() {
    std::cout << any::foo();
    std::cout << foo(); /*ошибка: нет декларации «foo» в этой области видимости*/
    return 0;
}
AnreyKazakov
Заблокирован
05.09.2012, 09:21  [ТС]     #include <iostream> Очень Подробно =) #16
Без комментариев не особо понятно...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
05.09.2012, 09:32     #include <iostream> Очень Подробно =) #17
AnreyKazakov, функции foo() не существует за пределами namespace any. Для обращения к ней явно указываем имя нэймспэйса.
any::foo();
AnreyKazakov
Заблокирован
05.09.2012, 09:41  [ТС]     #include <iostream> Очень Подробно =) #18
Тогда получается библиотека <string> входит в <iostream> ? Так чтоли?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.09.2012, 09:49     #include <iostream> Очень Подробно =) #19
AnreyKazakov,
C++
1
2
String as;
AnsiString As;
Это борландовские приблуды. Страуструп описывает в своей книги современный стандарт языка С++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2012, 09:53     #include <iostream> Очень Подробно =)
Еще ссылки по теме:

C++ #include <iostream>
Unable to open include file 'iostream' C++
C++ Почему visual studio 2008 не видит директиву #include <iostream>

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

Или воспользуйтесь поиском по форуму:
AnreyKazakov
Заблокирован
05.09.2012, 09:53  [ТС]     #include <iostream> Очень Подробно =) #20
СПАСИБО, теперь все встало на места свои =)
Yandex
Объявления
05.09.2012, 09:53     #include <iostream> Очень Подробно =)
Ответ Создать тему
Опции темы

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