Выбрать главу

(b) pi-debug(); (d) pi-reset(0); (f) pi-writeOn();

Упражнение 19.10

Дана такая иерархия классов:

class Base {

public:

operator int();

operator const char *();

// ...

};

class Derived : public Base {

public:

operator double();

// ...

};

Удастся ли выбрать наилучшую из устоявших функций для каждого из следующих вызовов? Назовите кандидаты, устоявшие функции и преобразования типов аргументов для каждой из них, наилучшую из устоявших (если она есть):

(a) void operate( double );

void operate( string );

void operate( const Base & );

Derived *pd = new Derived;

operate( *pd );

(b) void calc( int );

void calc( double );

void calc( const Derived & );

Base *pb = new Derived;

operate( *pb );

2012-11-03 22:30:41 Тарас

Супер статья! с первого раза конечно не до конца прочитал, но сохраню. Спасибо автору.

2012-10-28 16:29:45 СчаСтливыЙ

Дмитрий, Вы не где не найдёте учебник по С++ на одних примерах, или как вы варазились с меньшим текстом. Практика освона на теории. Учебник хорош, доступным языком написано, но примеров серьёзно мало, приходится искать в и-нете примеры. Хотя какая то работа, не всё же предоставлять пользователям.)

2011-10-24 12:10:43 Дмитрий

Очень хорошая информация, но написано как у Братьев Стругацких, голову можно поломать, закончил читать на разделе 19.2.4, дальше сил нет, надо искать что-то с более читабельными примерами и с меньшим текстом

20. Библиотека iostream

Частью стандартной библиотеки C++ является библиотека iostream – объектно-ориентированная иерархия классов, где используется и множественное, и виртуальное наследование. В ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Кроме того, разработчики классов могут расширять эту библиотеку для чтения и записи новых типов данных.

Для использования библиотеки iostream в программе необходимо включить заголовочный файл

#include iostream

* Операции ввода/вывода выполняются с помощью классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostream, является производным от них и поддерживает двунаправленный ввод/вывод. Для удобства в библиотеке определены три стандартных объекта-потока: cin – объект класса istream, соответствующий стандартному вводу. В общем случае он позволяет читать данные с терминала пользователя;

* cout – объект класса ostream, соответствующий стандартному выводу. В общем случае он позволяет выводить данные на терминал пользователя;

* cerr – объект класса ostream, соответствующий стандартному выводу для ошибок. В этот поток мы направляем сообщения об ошибках программы.

Вывод осуществляется, как правило, с помощью перегруженного оператора сдвига влево (), а ввод – с помощью оператора сдвига вправо ():

#include iostream

#include string

int main()

{

string in_string;

// вывести литерал на терминал пользователя

cout "Введите свое имя, пожалуйста: ";

// прочитать ответ пользователя в in_string

cin in_string;

if ( in_string.empty() )

// вывести сообщение об ошибке на терминал пользователя

cerr "ошибка: введенная строка пуста!\n";

else cout "Привет, " in_string "!\n";

}

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

x

перемещает данные в x, а

x

перемещает данные из x. (В разделе 20.1 мы покажем, как библиотека iostream поддерживает ввод данных, а в разделе 20.5 – как расширить ее для ввода данных новых типов. Аналогично раздел 20.2 посвящен поддержке вывода, а раздел 20.4 – расширению для вывода данных определенных пользователем типов.)

* Помимо чтения с терминала и записи на него, библиотека iostream поддерживает чтение и запись в файлы. Для этого предназначены следующие классы: ifstream, производный от istream, связывает ввод программы с файлом;

* ofstream, производный от ostream, связывает вывод программы с файлом;

* fstream, производный от iostream, связывает как ввод, так и вывод программы с файлом.

Чтобы использовать часть библиотеки iostream, связанную с файловым вводом/выводом, необходимо включить в программу заголовочный файл

#include fstream

(Файл fstream уже включает iostream, так что включать оба файла необязательно.) Файловый ввод/вывод поддерживается теми же операторами: