OLD-idmessage-129715

#1944561
-sc-
Участник

[quote name='Дикий Билл'] Мне вот что непонятно. Почему все используют cout вместо старой доброй printf? [/quote]Добавлю. Преимущества (основные):- безопасность с точки зрения типов- общий стиль для вывода как объектов встроенных типов, так и определенных пользователем.С первым по моему все понятно:char x;…printf(“Danger! %s”, x) Должно быть %c. Как минимум получим че попало на консоли, как максимум сможем выполнить свой кусок кода ну или хотя бы получить дамп какой-нибудь памяти))Со вторым пример:#include #include #include #include #include #include // подопытный класс А// имеет конструктор с параметрами, два члена и две ф-ции доступа к нимclass A{int id;std::string name;public:A(int id, const std::string name) :id(id), name(name){}int Id()const{ return id; }const std::string& Name()const{ return name; }};// оператор сдвига (вывода) в поток для класса Аstd::ostream& operator << (std::ostream& os, const A& a){os << a.Id() << "\t" << a.Name() << std::endl;return os;}// точка входаint main(int argc, char* argv[]){// здесь объект а класса А выводит себя на консольA a(1, "Vasya");std::cout << a;// а здесь уже в файл{std::ofstream ofs("somefile");ofs << a;}// a здесь в буфер строкиstd::ostringstream ostr;ostr << a;// проверим что в буфереstd::cout << ostr.str();// теперь создадим несколько объектовstd::vector va;va.push_back(A(1, “Name1”));va.push_back(A(2, “Name2”));va.push_back(A(3, “Name3”));// и выведем каждый на консольstd::copy(va.begin(), va.end(), std::ostream_iterator(std::cout, “”)); return 0;}Удобно!))