![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Я предлогаю закрепить эту тему где-нибудь на видно месте и чтобы люди, которые только начали изучать язык и не могут пока осилить "hello world" или не понимают почему теперь iostream.h указывается без *.h - отписывали свои вопросы тут. Согласитесь - большая часть таких людей не пользуется поиском, и создаёт темы с элементарными вопросами и начинается перепалка с модераторами / ругань / баны / обиды / сопли намотанные на кулак и всё такое прочее
![]() А тут без злости так сказать будем отвечать на их вопросы ![]() -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
tdebugger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 20.1.2007 Репутация: нет Всего: 4 |
У меня такой вопрос - почему теперь iostream.h указывается без *.h, я серьезно, раньше я как-то не обращал на это внимания, а раз тут такое дело, не грех и спросить....
--------------------
ТЕХНОЛОГИЯ "JAVA" НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt |
|||
|
||||
DjoNIK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
По стандарту *.h - Си-шный стиль, в то время как в С++ - либо *.hpp, либо вообще без расширения.
-------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
DjoNIK,
а разве стандартом оговорены расширения файлов? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
DjoNIK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
MAKCim, не по стандарту компилятора, конечно, это в принципе невозможно
![]() По одному из принятых стандартов (по-крайней мере я так читал у авторитетного источника) -------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Вроде по последнему стандарту принято, что заголовочные файлы не должны иметь расширения.
Правда чем это обусловлено - не ясно. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
FiMa1 |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Copy/Paste (Шилдт Г. Самоучитель С++):
Новые заголовки в программах на C++ Как вам должно быть известно из опыта программирования на С, при использовании библиотечной функции в программу необходимо включить заголовочный файл. Это делается с помощью инструкции #include. Например, при написании программ на языке С заголовочным файлом для функций ввода/вывода является файл stdio.h, который включается в программу с помощью следующей инструкции:
Здесь stdio.h — это имя файла, который используется функциями ввода/вывода, и предыдущая инструкция заставляет компилятор включить указанный файл в вашу программу. В первые несколько лет после появления C++ в нем использовался тот же стиль оформления заголовков, что и в С. Для совместимости с прежними программами в языке Standard C++ этот стиль по-прежнему поддерживается. Тем не менее при работе с библиотекой Standard C++ в соответствии с новым стилем вместо имен заголовочных файлов указываются стандартные идентификаторы, по которым компилятор находит требуемые файлы. Новые заголовки C++ являются абстракциями, гарантирующими объявление соответствующих прототипов и определений библиотеки языка Standard C++. Поскольку новые заголовки не являются именами файлов, для них не нужно указывать расширение .h, а только имя заголовка в угловых скобках. Ниже представлены несколько заголовков, поддерживаемых в языке Standard C++:
Такие заголовки по-прежнему включаются в программу с помощью инструкции #include. Единственным отличием является то, что новые заголовки совершенно не обязательно являются именами файлов. Поскольку С++ содержит всю библиотеку функций С, по-прежнему поддерживается стандартный стиль оформления заголовочных файлов библиотеки С. Таким образом, такие заголовочные файлы, как stdio.h и ctype.h все еще доступны. Однако Standard C++ также определяет заголовки нового стиля, которые можно указывать вместо этих заголовочных файлов. В соответствии с версией C++ к стандартным заголовкам С просто добавляется префикс с и удаляется расширение .h. Например, заголовок math.h заменяется новым заголовком C++ <cmath>, а заголовок string.h — заголовком <cstring>. Хотя в настоящее время при работе с функциями библиотеки С допускается включать в программы заголовочные файлы в соответствии со стилем С, такой подход не одобряется стандартом языка Standard C++. (То есть, он не рекомендуется.) По этой причине во всех имеющихся в книге инструкциях #include используется новый стиль написания заголовков программ. Если ваш компилятор для функций библиотеки С не поддерживает заголовки нового стиля, просто замените их заголовками в стиле С. Поскольку заголовки нового стиля появились в C++ совсем недавно, во многих и многих прежних программах вы их не найдете. В этих программах в соответствии со стилем С в заголовках указаны имена файлов. Ниже представлен традиционный способ включения в программу заголовка для функций ввода/вывода:
Эта инструкция заставляет компилятор включить в программу заголовочный файл iostream.h. Как правило, в заголовках прежнего стиля вместе с расширением .h используется то же имя, что и в соответствующих им новых заголовках. Как уже отмечалось, все компиляторы C++ поддерживают заголовки старого стиля. Тем не менее такие заголовки объявлены устаревшими и не рекомендуются. Именно поэтому в книге вы их больше не встретите. ! Несмотря на повсеместное распространение в программах заголовков старого стиля, они считаются устаревшими. Библиотека <iostream.h>не является частью стандарта языка. С другой стороны библиотека <iostream> входит в стандарт. Библиотека <iostream> реализована в виде объектно-ориентированной иерархии классов, поддерживает как основные так и расширенные (unicode) символы. С другой стороны <iostream.h> ограничена исключительно символами char (символы ASCII). Кроме того, целесообразно использовать <iostream>, если, разумеется, ваш компилятор поддерживает это, т.к. все компоненты <iostream> находятся в пространстве имен (namespace) std, в то время, как компоненты <iostream.h> располагаются в глобальном пространстве. Есть три основных механизма использования библиотеки <iostream>:
Это сообщение отредактировал(а) FiMa1 - 11.10.2007, 10:48 |
||||||||||||
|
|||||||||||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Какой компилятор выбрать?
Компиляторы и IDE для C++ Какую книгу выбрать? Литература по C++ Что такое: STL, MFC, ATL, API, WinAPI, .Net, VCL? Что такое STL... Что такое MFC... Что такое ATL... Что такое API... Что такое WinAPI... Что такое .NET... Что такое VCL... Итог: да и воздастся ищущему... ДРУЗЬЯ, ПРЕДЛАГАЮ ИЗБЕГАТЬ ВОСТОРЖЕННЫХ И БЛАГОДАРСТВЕННЫХ РЕПЛИК В ДАННОМ ТРЕДЕ, ДАБЫ НЕ ПЕРЕГРУЖАТЬ ЕГО ЛИШНЕЙ ИНФОРМАЦИЕЙ, ЕСЛИ ТРЕД ДЕЙСТВИТЕЛЬНО РЕШЕНО ЗАКРЕПИТЬ! СПАСИБО И БЕЗ ОБИД ![]() Это сообщение отредактировал(а) FiMa1 - 11.10.2007, 13:41 |
|||
|
||||
tdebugger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 20.1.2007 Репутация: нет Всего: 4 |
Спасибо за бурную реакцию, однако появились вопросы по некоторым нюансам, как получу доступ к IDE, проверю, уточню и выскажу...
--------------------
ТЕХНОЛОГИЯ "JAVA" НЕ ПРЕДНАЗНАЧЕНА ДЛЯ УПРАВЛЕНИЯ ЯДЕРНЫМИ УСТАНОВКАМИWindows98 License.txt |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
to FiMa1 будте справедливы киньте ссылку еще на VCL!
|
|||
|
||||
chelser |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 9.10.2007 Репутация: нет Всего: нет |
ценная информация
спасибо |
|||
|
||||
FiMa1 |
|
||||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
В чем отличие ссылки от указателя? Как использовать ссылки?
В C++ есть элемент, родственный указателю — это ссылка (reference). Ссылка является скрытым указателем и во всех случаях, и для любых целей ее можно употреблять просто как еще одно имя переменной. Ссылку допустимо использовать тремя способами:
Наиболее распостраненное применение ссылки — передача ее в качестве параметра функции. Что бы понять, что такое параметр-ссылка и как это работает, рассмотрим программу, в которой параметром является указатель, а не ссылка:
Здесь функция foo() загружает целое значение 100 по адресу, который обозначен указателем p. В данной программе функция foo() вызывается из функции main() с адресом переменной i, по которому она располагается в памяти. Таким образом, после выполнения функции foo() переменная i будет содержать число 100. В этой программе показано, как использовать указатель для реализации механизма передачи параметра посредством вызова по ссылке (call by reference). В программах С такой механизм является единственным спосо бом добиться вызова функции по ссылке. Запомните в языке Си ссылок нет! Однако в C++ с помощью параметра-ссылки можно полностью автоматизировать весь процесс. Чтобы узнать, как это сделать, изменим предыдущую программу. В ее новой версии используется параметр-ссылка:
Проанализируйте эту программу! Во-первых, для объявления параметра-ссылки перед именем переменной ставится знак амперсанда (&). Таким образом, переменная r объявляется параметром функции foo(). Теперь, поскольку переменная r является ссылкой, больше не нужно и даже неверно указывать оператор ‘*’. Вместо него всякий раз, когда переменная п упоминается внутри функции f(), она автоматически трактуется как указатель на аргумент, используемый при вызове функции f(). Это значит, что инструкция
фактически помещает число 100 в переменную, используемую при вызове функции foo(), каковой в данном случае является переменная i. Далее, при вызове функции f() перед аргументом не нужно ставить знак &. Вместо этого, поскольку функция f() объявлена как получающая параметр-ссылку, ей автоматически передается адрес аргумента. Теперь важно запомнить следующее: значение адреса, на который указывает ссылка, вы изменить не можете (в этом поведение ссылок схоже с поведением константных указателей). Например, если в программе, где используется параметр-ссылка поместить в тело функции foo инструкцию:
Вместо инкрементирования адреса, как это было бы с использованием указателей эта инструкция инструкция инкрементирует значение переменной (в данном случае это переменная i). Кроме того, ссылка должна быть инициализирована в месте ее объявления, так если вы напишите где-то в программе, к примеру:
то непременно получите ошибку вида “references must be initialized” (в этом можно найти еще одно сходство ссылок с константными указателями). Параметры-ссылки имеют несколько преимуществ по сравнению с аналогичными (более или менее) альтернативными параметрами-указателями. Во-первых, с практической точки зрения нет необходимости получать и передавать в функцию адрес аргумента. При использовании параметра ссылки адрес передается автоматически. Во-вторых, по мнению многих программистов, параметры-ссылки предлагают более понятный и элегантный интерфейс, чем механизм указателей. В-третьих, как вы узнаете потом, при передаче объекта функции через ссылку копия объекта не создается. Это уменьшает вероятность ошибок, связанных с построением копии аргумента и вызовом ее деструктора. ВОЗВРАЩЕНИЕ ПАРАМЕТРОВ ИЗ ФУНКЦИЙ ПОСРЕДСТВОМ ССЫЛОК Фактически ничего особенного здесь нет, реализуется это также как и в случае с получением параметров посредством ссылок. Для начала рассмотрим пример с использованием указателей для возврата значений из функций:
Но функции могут возвращать и ссылки, однако здесь надо быть осторожным! Если возвращение ссылки переменной объявлено в вызываемой функции, переменная должна быть объявлена внутри этой функции как static. В противном случае ссылка адресуется автоматической переменной, которая после завершения функции уничтожается; в таком случае говорят, что переменная «не определена» и поведение программы непредсказуемо. Так для следующего примера
вы получите следующее предупреждение: “ returning address of local variable or temporary”. Да, результат выполнения такой программы чреват печальными последствиями, если к моменту использования значения переменной var, располагающееся по адресу возвращаемому функцией foo, значение будет перезаписано чем-либо другим. Таким образом вы должны объявить var так
Обратите внимание, что для возврата адреса переменной var из функции также не нужно использовать оператора взятия адреса ‘&’, т.к. функция изначально была объявлена как возвращающая ссылку на переменную целого типа. Соответственно и в main оператора разыменования ‘*’ писать не нужно. НЕЗАВИСИМЫЕ ССЫЛКИ Хотя они обычно и не используются, вы можете создавать независимые ссылки (independent reference). Независимая ссылка — это ссылка, которая во всех случаях является просто другим именем переменной. Поскольку ссылкам нельзя присваивать новые значения, независимая ссылка должна быть инициализирована при ее объявлении. ! Большинство программистов чувствует ненужность независимых ссылок, они добавляют неразберихи в программу. Как правило, их следует избегать. Пример программы с независимой ссылкой:
В этой программе независимая ссылка ref служит другим именем переменной х. С практической точки зрения ref и х идентичны. В завершении подведем некоторые ограничения, которые распостраняются на ссылки:
|
||||||||||||||||||
|
|||||||||||||||||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
таких вопросов ну очень много разных возникнуть может. Толку если все ответы на них в кучу свалить? Если чел поленился книгу почитать, он станет читать километровую тему? Сомневаюсь.
Для элементарных вопросов есть FAQ. Если чел поленился туда заглянуть, то почему он станет читать эту тему? Rickert, предложение хорошее, доброе, но только велосипед уже изобретен: FAQ, статьи, исходники... |
|||
|
||||
FiMa1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Первое что пришло в голову... Ну и так, если все ж останется: Чем отличается константный указатель от константного указателя на константу? Константный указатель- для такого указателя невозможно изменить адрес на который он указывает. Константный указатель на константу - для такого указателя невозможно изменить ни адрес на который он указывает, ни значение, которое находится по данному адресу в памяти. Для примера просмотрите приведенный ниже код:
|
||||
|
|||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
zkv, понимаешь, не в обиду будет сказано дзайнеру и админам, но раздел FAQ - незаметен.
Если бы ссылка на него висела в разделе "C/C++ общие вопросы" - то народ бы юзал. имхо. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |