Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP.DOC
Скачиваний:
13
Добавлен:
03.05.2019
Размер:
618.5 Кб
Скачать

7. Живучесть объектов Проблемы хранения объектов на диске

Вернемся к классу Men, с которого мы начали изучение ООП, и рассмотрим возможности работы с его данными:

class Men{

char* name;

int age;

};

Легко сообразить, что хотя с объектами этого класса можно выполнять любые требуемые преобразования в памяти, однако их нельзя записать на диск. Действительно, после создания объекта и его инициализации переменная name будет содержать адрес символьной строки с именем индивидуума; сама строка, введенная в программу, например, с клавиатуры, будет находится где-то в памяти. Если записать такой объект на диск, а затем прочитать его (другой программой), в переменную name поступит тот же адрес, но в памяти по этому адресу уже никакого имени не будет, и фактически переменная name будет указывать на случайное место в памяти.

Для того, чтобы символьная строка входила в состав объекта, переменную name можно объявить как символьный массив:

char name[20];

Однако с символьными массивами, содержащими фамилии людей, работать неудобно. Размер массива придется определять с запасом, и в большей части объектов в массивах окажется много неиспользуемого места; инициализацию такой переменной нельзя выполнить простой операцией присваивания

name=”Переплетчиков”;

(имени массива name нельзя присвоить никакого значения!). Строку придется копировать:

strcpy(name,”Переплетчиков”);

Таким образом, при необходимости сохранения на диске объектов, содержащих символьные строки, возникают определенные сложности. Эти сложности можно преодолеть, используя библиотечный класс string, который и предназначен специально для повышения мобильности объектов, в состав которых входят символьные строки.

Библиотечный класса string

Класс string (его определение содержится в заголовочном файле cstring.h) предназначен для хранения символьных строк и выполнения с ними разнообразных операций. В класс входит 15 конструкторов, около пяти десятков функций-членов и большое количество перегруженных операторов, обеспечивающих практически все действия, которые приходится выполнять над символьными строками. Приведем несколько примеров.

Конструкторы

string() – конструктор по умолчанию; создает объект со строкой нулевой длины (в некоторых случаях требуется сначала создать “пустой” объект, и лишь затем заполнить его данными, например, с помощью операций копирования или чтения с диска).

string(char* str) – создание объекта класса string из символьной строки str. Другими словами, этот конструктор преобразует обычную символьную строку в объект класса string.

string (char c) – создание объекта класса string, содержащего единственный символ c.

Функции-члены

char* c_str() – функция возвращает символьную строку, содержащуюся в объекте класса string. Фактически эта функция выполняет операцию преобразования объекта класса string в обычную символьную строку.

unsigned int length() – функция возвращает длину строки, содержащейся в объекте класса string.

string& append(string& s) – функция сцепляет объект-аргумент класса string с объектом (тоже класса string), для которой вызывается эта функция.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]