Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему используют в С++ printf, void main() и т.д. Совсем меня запутали... 
V
    Опции темы
Кнером
Дата 28.5.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Приступил к изучению С++. Не понимаю, почему программисты
пишущие на С++ используют такие функции как printf, void main() и т.д.

Пример.
Цитата
#include <iostream.h>    
#include <conio.h>    
#include <string.h>    

void main(void)    
{


Зачем у заголовков указывают расширение? Если новые заголовки
не являются именами файлов? В одной из книг было написано, что
новый вид заголовков является виртуальным включаемым файлом,
который содержит информацию в предварительном скомпилированном виде.

Почему указывают тив главной финкции void? Если по правилам
она должна быть типа int? Лично у меня все 3 компилятора
дают оплевуху и сообщают, что функция должна быть типа int.

Для чего и почему использую функции и С. К примеру, printf.
Если в С++ нуно использовать функцию cout. В одной из книги
было написано, что эта функция усовершенствованная printf.

И так далее...

Было так же написано, что если программист использует функции
С в С++, то не смысла тогда вообще использовать С++.
Так как все равно он не использует приимущества С++.

На форуме не раз встречал, что человек говорит, что написал программу
на С++. А в коде присуствует все выше описанное...

Больше всего меня запутал купленный мною справочник.
С++. Специальный справочник (2-е издание) / Карпов Б., Баранова Т.
СПБ.: Питер, 2005 - 381 с.: Ил.
Обложка синяя, текст желтый с белым.

Несколько примеров кода из книги.

Код

#include <iostream.h>
void main()
{
  int n=123;
  cout << oct << n << endl;
}


При компилировании выдает.

Цитата

main.cpp:3: error: `main' must return `int'
main.cpp: In function `int main(...)':
main.cpp:5: error: `oct' undeclared (first use this function)
main.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)


Первая программа на С++.

Код

#include <stdio.h>
void main()
{
  printf ("\nЗдравствуй, мир!");
}


Если заменить void на int, тогда программа будет скомпилирована.

Такое ощущение, что все в перемешку. Лишь бы купили книгу.

-

Дополнительно хочу спросить, что является в действительности
оператором вывода в С++.
1. cout
2. cout <<
3. <<

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

Если к примеру нужно будет вывести на принтер. То нужно будет
указать некий ptr. Просто уще не знаю как вывести на принтер.
Тогда получается, что оператором вывода можно считать два угла.

В книге написано, что оператор вывода это cout.

Всем ответившим спасибо.
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 28.5.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

cout это подпрограмма,

это объект типа ostream
ostream - это typedef basic_ostream<char>
Цитата

Дополнительно хочу спросить, что является в действительности
оператором вывода в С++.

<<
Цитата

В книге написано, что оператор вывода это cout.

выкинь книжку  smile 
Цитата

Было так же написано, что если программист использует функции
С в С++, то не смысла тогда вообще использовать С++.
Так как все равно он не использует приимущества С++.

согласен
Цитата

Такое ощущение, что все в перемешку. Лишь бы купили книгу.

не поддавайся  smile , покупай Страуструпа  smile   

Это сообщение отредактировал(а) MAKCim - 28.5.2006, 18:45


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ZeusAtVingrad
Дата 28.5.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



Цитата

Приступил к изучению С++. Не понимаю, почему программисты
пишущие на С++ используют такие функции как printf, void main() и т.д.

Ты приступил к изучению С++ или к изучению программистов С++? smile

Цитата

Цитата 
#include <iostream.h>    
#include <conio.h>    
#include <string.h>    
Зачем у заголовков указывают расширение? Если новые заголовки
не являются именами файлов? В одной из книг было написано, что
новый вид заголовков является виртуальным включаемым файлом,
который содержит информацию в предварительном скомпилированном виде.

Смелые, однако, заявления.

Цитата

Почему указывают тив главной финкции void? Если по правилам
она должна быть типа int? Лично у меня все 3 компилятора
дают оплевуху и сообщают, что функция должна быть типа int.

Ну и указывай int. Делов-то!
Это не главное отличие C и C++.

Цитата

Для чего и почему использую функции и С. К примеру, printf.
Если в С++ нуно использовать функцию cout.
В одной из книги было написано, что эта функция усовершенствованная printf.

cout - не функция, стандартный поток вывода программы. Объект класса, как уже написали.

Цитата

Было так же написано, что если программист использует функции
С в С++, то не смысла тогда вообще использовать С++.
Так как все равно он не использует приимущества С++.

 smile 
Автор книги имеет весьма своеобразное представление о преимуществах C++.
C++ - это:
- объектно-ориентированное программирование;
- шаблонное программирование;
- мощная стандартная библиотека;
- ну и прочие "мелочи".

Цитата

Дополнительно хочу спросить, что является в действительности
оператором вывода в С++.
1. cout
2. cout <<
3. <<

Из всего перечисленного оператор: <<

Цитата

Если к примеру нужно будет вывести на принтер. То нужно будет
указать некий ptr. Просто уще не знаю как вывести на принтер.

Стандартная библиотека ничего о принтерах не знает.
Придётся использовать другие методы.

Цитата

В книге написано, что оператор вывода это cout.

Не знаю хорошо ли это для новичка, но я присоединюсь к предыдущему оратору и посоветую Страуструпа. 
PM MAIL   Вверх
Xenon
Дата 28.5.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



ZeusAtVingrad Просто в стандрте C++ рекомендуется использовать
Код

#include "stdafx.h"
int main(int argc, _TCHAR* argv[])
{
    return 0;
}
 


--------------------
user posted image  
PM MAIL   Вверх
MAKCim
Дата 28.5.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Просто в стандрте C++ рекомендуется использовать

цитату можно? а то я что-то не уверен в этом  


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Xenon
Дата 28.5.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Где-то было, я точно не помню. Вроде как для винды, а тем более для VC это стандарт smile Может мне показалось, но вроде было ...
Но то, что main должна быть с int, Это, вроде как, точно стандрт? 


--------------------
user posted image  
PM MAIL   Вверх
Кнером
Дата 28.5.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



MAKCim, спасибо за совет.

-

Цитата
Ты приступил к изучению С++ или к изучению программистов С++? smile

 smile 

Цитата
Цитата

Цитата 
#include <iostream.h>    
#include <conio.h>    
#include <string.h>    
Зачем у заголовков указывают расширение? Если новые заголовки
не являются именами файлов? В одной из книг было написано, что
новый вид заголовков является виртуальным включаемым файлом,
который содержит информацию в предварительном скомпилированном виде.

Смелые, однако, заявления.

Цитата

Было так же написано, что если программист использует функции
С в С++, то не смысла тогда вообще использовать С++.
Так как все равно он не использует приимущества С++.

 smile 
Автор книги имеет весьма своеобразное представление о преимуществах C++.
C++ - это:
- объектно-ориентированное программирование;
- шаблонное программирование;
- мощная стандартная библиотека;
- ну и прочие "мелочи".

-
Цитата

Автор книги Брайн Оверленд на протяжении десяти лет работал в компании
Microsoft программистом, руководителем проектов и писателем - уникальная
комбинация, которая позволила написать множество понятных и точных книг
по программированию.

Автор книги громких зявлений.  smile 

Цитата
Цитата

Почему указывают тив главной финкции void? Если по правилам
она должна быть типа int? Лично у меня все 3 компилятора
дают оплевуху и сообщают, что функция должна быть типа int.

Ну и указывай int. Делов-то!
Это не главное отличие C и C++.

Я понимаю, что это не главное отличие. Я не понимаю, почему человек говорит,
что этот код написан на С++, а не на С.

Цитата
Цитата

Для чего и почему использую функции и С. К примеру, printf.
Если в С++ нуно использовать функцию cout.
В одной из книги было написано, что эта функция усовершенствованная printf.

cout - не функция, стандартный поток вывода программы. Объект класса, как уже написали.

Я спросил: "для чего и почему в С++ используют функции из С".
Если это конечно позволяет компилятор.

XenonSk, как я знаю:
- #include "stdafx.h", это из MS Visual Studio, а не из стандарта С++.
- int argc, _TCHAR* argv[], это не обязательный параметр, так как мы программе
ничего не передаем при ее запуске.

Что по поводу справочника?

Добавлено @ 23:17 
Цитата(XenonSk @  28.5.2006,  22:20 Найти цитируемый пост)
а тем более для VC это стандарт
  smile 
 
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 28.5.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(Кнером @  28.5.2006,  16:30 Найти цитируемый пост)
Для чего и почему использую функции и С. К примеру, printf.
Если в С++ нуно использовать функцию cout. В одной из книги
было написано, что эта функция усовершенствованная printf.

Насколько меня научили (сам не измерял) printf намного быстрее, чем  cout. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Кнером
Дата 29.5.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Цитата(sergej.z @  28.5.2006,  23:21 Найти цитируемый пост)
Насколько меня научили (сам не измерял) printf намного быстрее, чем  cout.

А на С программа "Hello World!" весит 2,70 кб, а на С++ 5 кб. Тогда лучше использовать С?
Получается, что программистов на С++ можно разделить на две категории:
1) те кто используют традиционную версию С++ (в перемешку С и С++)
2) те кто используют Standard C++ (чистый С++ с наворотами, нельяз использовать С)

Просто в книге написано, что на сегодняшний день во всх компиляторах реализован Standard C++  smile 
 
PM MAIL WWW ICQ   Вверх
Любитель
Дата 29.5.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Стандарт предусматривает сишные функции ради соместимоти, правда большинство заголовочных файлов заменены с xxx.h на cxxx (например stdlib.h - cstdlib) и имена объявлены в неймспейсе std.

Насчёт производительности и читабельности - надо разумно выбирать. Сомневаюсь, что 5 килобайт это очень тяжело, и что производительность упала так, что надо прибегать к извращенским методам.

Насчёт пример из книжки: писал человек, ориентирующийся на VC++ 6. Дело в том, что по стандарту main возвращает int (как в C, так и в C++), но бывают ситуации (обычно отдельные ветки), когда она может ничего не возвращать (например - аварийное завершение). Компилеры для любой другой функции при этом выдадут варнинги, для main не должны. В VC++ 6 было не так, как следствие - разрешили void для main. Ну а впервом примере забыли, что в нормальных реализациях STL все имена (в том числе манипуляторы oct и endl, поток cout) объявлены в пространстве имён std. Есть три варианта решения проблемы:
Код

//1
#include <iostream>

int main()
{
   int n = 123;
   std::cout << std::oct << n << std::endl;
   return 0;
}

//2
#include <iostream>

using std::cout;
using std::oct;
using std::endl;

int main()
{
  int n = 123;
  cout << oct << n << endl;
  return 0;
}

//3
#include <iostream>

using namespace std;

int main()
{
  int n = 123;
  cout << oct << n << endl;
  return 0;
}

Кстати заметь, что в первых двух случаях оператор <<, так же перегруженный внутри std раскрывается за счёт ADL.

Последний вопрос - для чего изучать сишные приёмы в C++. На мой взгляд смысл есть, хотя надо помнить, что это именно сишные вещи. А смысл, во-первых в том, что C++ - это всё-таки гибридный язык (по крайней мере если смотреть на большинство практического кода). Во вторых, си - тоже не помешает. В третьих, очень многме хорошие книжки (например, понравившаяся мне - "Философия C++. Практическое программирование") подчёркивают приёмы C++ через противопоставление приёмам C. 


--------------------
PM MAIL ICQ Skype   Вверх
Кнером
Дата 29.5.2006, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Любитель, благодарю Вас за подробный ответ и не большой совет. 

Это сообщение отредактировал(а) Кнером - 29.5.2006, 01:06
PM MAIL WWW ICQ   Вверх
Любитель
Дата 29.5.2006, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Спасибо!  smile 

 smile 
Цитата

Вас
За что же так сразу? 


--------------------
PM MAIL ICQ Skype   Вверх
Кнером
Дата 29.5.2006, 05:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Любитель, извини, что так официально. Обещаю исправиться  smile 
Всем спасибо, вопрос решен. 
PM MAIL WWW ICQ   Вверх
ZeusAtVingrad
Дата 29.5.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



Цитата(XenonSk @ 28.5.2006,  22:05)
ZeusAtVingrad Просто в стандрте C++ рекомендуется использовать
Код

#include "stdafx.h"
int main(int argc, _TCHAR* argv[])
{
    return 0;
}

Неуверен ни в stdafx.h ни в _TCHAR.
Ни того ни другого в "стандарте" думаю нет, т.к. это заморочки конкретного компилятора. 
PM MAIL   Вверх
bel_nikita
Дата 8.6.2006, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата(ZeusAtVingrad @ 29.5.2006,  08:23)
Цитата(XenonSk @ 28.5.2006,  22:05)
ZeusAtVingrad Просто в стандрте C++ рекомендуется использовать
Код

#include "stdafx.h"
int main(int argc, _TCHAR* argv[])
{
    return 0;
}

Неуверен ни в stdafx.h ни в _TCHAR.
Ни того ни другого в "стандарте" думаю нет, т.к. это заморочки конкретного компилятора.

ИМХО, хорошим стилем считается конструкция:
Цитата

int main ( int argc, char *argv[] )
{
  return 0;
}


 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Xenon
Дата 8.6.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Насчет stdafx.h - это я его ненароком сунул. А конструкция
Код

int main(int argc, char* argv[])
{
  return 0;
}

имхо, считается, хорошим стилем smile Я понимаю, что это не нежно, если в прогу не передаются параметры при запуске, но ... По-мойму это из серии: "А что лучше int main, или void main"   

Это сообщение отредактировал(а) XenonSk - 8.6.2006, 23:59


--------------------
user posted image  
PM MAIL   Вверх
LPBOY
Дата 8.6.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Цитата(bel_nikita @  8.6.2006,  23:33 Найти цитируемый пост)
ИМХО, хорошим стилем считается конструкция:

+1 Правда, параметры и return 0 можно опускать:

Код

int main()
{

}
 
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Xenon
Дата 8.6.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



LPBOY А зачем тогда писать int main, если ты ничего не ретурнишь? 


--------------------
user posted image  
PM MAIL   Вверх
LPBOY
Дата 9.6.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



В этом случае автоматически ретурнится 0, если выполнилась последняя инструкция функции main. smile А int main, потому что иначе какие-нибудь comeau или gcc обматерят. smile 
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
DaJunior
Дата 9.6.2006, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 8.6.2006
Где: за компьютерным с толом

Репутация: -1
Всего: нет



сообщение 8.6.2006, 23:57

Это с каких это пор такая конструкция считается хорошим стилем?!?!?!?
M
sergej.z
вырезал


Вообще int main() означает, что программа после выполнения вернет значение типа int, и все... если так пишешь, то в конце гл. ф-ии соизволь написать return 0; 

Если ты пишешь void main(void), то это значит, что ф-ия не возвращает значений, и не принимает их в качестве параметров.

А вообще мое мнение - если твоя прога ничего не возвращает, то и напиши ты void перед main'ом, потом самому понятней будет.

///////////////////////////////////////////////////////////////////////////////////////////////////

И вообще, если уж пошла речь о правильном стиле программирования, то лучше почитайте книгу "Правила программирования на Си и СИ++(Ален И.Голуб)" - рекомендую всем!

А чтобы не возникало 
M
sergej.z
вырезал
вопросов у новичков - "Как программировать на С++(Харви Дейтел, Пол Дейтел)" - все разжевано, ребенок поймет. Кстати книга сама по себе оч. интересна даже тем, кто давно программирует, лично меня она оч. порадовала, когда нашел ее в рунете...  
PM MAIL   Вверх
Кнером
Дата 9.6.2006, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



DaJunior, об этом и более точно уже написал LPBOY.

  
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 9.6.2006, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Это с каких это пор такая конструкция считается хорошим стилем?!?!?!? БРЕД! 

далеко не бред
например в юниксах (быть может не только в них) по завершении программы оболочка записывает в специальную переменную код завершения. Нормальным кодом завершения считается 0, и многие скрипты его проверяют. В случае если main не возвращает ничего, то код завершения - в общем случае произвольный, случайный. Оттого даже правильно отработавшая программа с внешней точки зрения может оказаться неправильно отработавшей  

Это сообщение отредактировал(а) MAKCim - 9.6.2006, 09:43


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Xenon
Дата 9.6.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



DaJunior, Ну тогда давай вообще все правила хорошего тона будем считать бредом и будем писать код кое-как, что только самому разработчику понятно.
Есть же, блин, кананоы определенные. 


--------------------
user posted image  
PM MAIL   Вверх
Кнером
Дата 10.6.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Цитата(XenonSk @  9.6.2006,  09:16 Найти цитируемый пост)
правила хорошего тона

Чтобы было легче жить. Если так можно сказать. Жизнь и так сложна.
Нужно упрощать, а не усложнять.

XenonSk, это как дополнение.  smile 
 
PM MAIL WWW ICQ   Вверх
harper
Дата 12.6.2006, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.5.2006

Репутация: нет
Всего: нет



кстати, а почему <<  оператор вывода? это же оператор сдвига применительно к объектам класса потоков перегруженный так что осуществляет вывод. или нет? 
PM MAIL   Вверх
MAKCim
Дата 12.6.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

кстати, а почему <<  оператор вывода? это же оператор сдвига применительно к объектам класса потоков перегруженный так что осуществляет вывод. или нет? 

Цитата

... Но почему именно <<?. Новый лексический знак придумать невозможно. ... Я пробовал < и >, но их смысл так крепко врос в людские умы, что новые выражения, обозначающие ввод/вывод, для всех практических применений оказались просто нечитабельны.
Операторы << и >> используются для встроенных типов не так часто, чтобы вызвать проблему. Они симметричны в том смысле, что могут использоваться для обозначения "в" и "из". Приоритет операции << не очень высок и позволяет вставлять арифметические выражения в операнды без скобок.

Страуструп (ЯП C++)
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Oleg_Ci
Дата 12.6.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 3
Всего: 30



Цитата
Дополнительно хочу спросить, что является в действительности
оператором вывода в С++.
1. cout
2. cout <<
3. <<
'cout'  и  'cout<<' - это вобще-то не операторы.
Перегруженный оператор '<<' называется оператором вставки, в том облике как его представляет класс ostream.
Класс ostream включает функцию 'operator<<()', а 'cout' является объектом класса ostream, соответственно оператор '<<' (функция-элемент) может вызываться обьектом 'cout' ( cout << ). Или по другому - ofstream включает ещё методы 'put()', 'write()', соответственно можно написать cout.put('A'); cout.write("aaa",3);  ,т.е. 'cout' - это объект класса,  '<<' - это метод класса, а 'cout<<' - а эта конструкция, вроде называется - вызов функции.
Функция-член 'operator<<' принимает 2 аргумента , 1-ссылка на класс ostream (cout<<"aa"  - левый операнд), 2-что напечатать надо (cout<<"aa"  - правый операнд),  поэтому когда пишем 'cout<<"aa"'  мы на самом деле вызываем функцию 'operator<<'. Ещё можно написать вот так:  operator<<(cout,"aaa").
Код

int main(int argc, char* argv[])
{
   std::cout<<"ddd";
   std::cout.write("  aaa",5);
   std::operator<<(std::cout," bbb");
   std::cin.get();
   return 0;
}
 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.