(a) pi-print(); (c) pi-readOn(); (e) pi-log( num );
(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