Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
67
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Часть III. Стандартная библиотека

Потоки и типы, определенные пользователем

Для ввода и вывода в потоках используются перегруженные для всех стандартных типов операции чтения и извлечения « и ». При этом выбор конкретной операции определяется типом фактических параметров. Для того чтобы вводить и выводить величины типов, определенных пользователем, требуется перегрузить эти операции. Это бинарные операции, левым операндом которых является объект-поток, а правым — объект, который требуется извлечь или поместить в этот поток. Возвращаемое значение должно быть ссылкой на поток, чтобы можно было организовывать цепочки операций, как и в случае стандартных типов.

Пусть, например, в программе определен класс MyClass:

class MyClass{ i nt x; float y;

} Для того чтобы вводить и выводить объекты этого класса, требуется определить в классе MyClass операции следующего вида:

// Вывод:

friend ostream& operator « (ostream& out, MyClass& C){ return out « "x = " « C.x « " у = " « С.у:

}

// Ввод:

friend istream& operator » (istream& in, MyClass& C){

cout « "Введите х: ";in » C.x;

cout « "Введите у: ";in » C.y;

return in;

}

После этого в программе можно использовать объекты класса MyClass в операциях ввода и вывода наряду с величинами стандартных типов:

#include <iostream.h> class MyClass{ int x; float y; public:

MyClass(int nx = 1, float ny = 0.01){x = nx; у = ny;}

friend ostreamu operator« (ostreamu out. MyClass& C){

return out « "x = " « C.x « " у = " « C.y;

}

friend istreamu operator» (istream& in, MyClass& C){

cout « "Введите х: "; in » C.x;

cout « "Введите у: "; in » C.y;

return in;

Глава 10. Потоковые классы

285

} }:

int main(){ MyClass С; cout « С « endl; MyClass CK100. 100); cout « Cl « endl; MyClass C2;

cin » C2; cout « C2 « endl; return 0; } Экземпляр С класса MyClass создается с параметрами конструктора по умолчанию, поэтому на экран будет выведено:

х = 1 у = 0.01 Экземпляр С1 класса MyClass создается с параметрами 100, 100:

х = 100 у = 100

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

Глава 11

Строки

Стандартные классы просто так в состав C+ + не добавляются.

Г. Шилдт

C++ не содержит стандартного типа данных «строка». Вместо этого он поддерживает массивы символов, завершаемые нуль-символом. Библиотека содержит функции для работы с такими массивами, унаследованные от С и описанные в заголовочном файле <string.h> (<cstring>). Об этих функциях рассказывалось в разделе «Функции работы со строками и символами», с. 91. Они позволяют достичь высокой эффективности, но весьма неудобны pi небезопасны в использовании, поскольку выход за границы строки не проверяется.

Тип данных string стандартной библиотеки лишен этих недостатков, но может проигрывать массивам символов в эффективности. Основные действия со строками выполняются в нем с помощью операций и методов, а длина строки изменяется динамически в соответствии с потребностями. Для использования класса необходимо подключить к программе заголовочный файл <string>1. Рассмотрим пример:

#inc1ude <cstring> #inc1ude <string> #inc1ude <iostream> using namespace std; int main (){

char cl[80]. c2[80]. c3[80]; // Строки с завершающим нулем

string si. s2. s3;

// Присваивание строк

strcpy(cl. "old string one");

strcpy(c2. cl);

1 В старых версиях компиляторов заголовочный файл для подключения класса string может иметь имя cstri ng. h или bstri ng. h, а заголовочный файл для строк старого стиля —

strijng.h.