Читать «Полный справочник по С++» онлайн - страница 429

Герберт Шилдт

Процедура ввода строки немного сложнее. Сначала строка считывается с помощью функции getlineO. Длина наибольшей строки, которую можно ввести, ограничена 254 символами плюс нулевой байт, служащий признаком конца строки. Как указано в комментариях, эту величину можно изменить. Символы считываются до тех пор, пока не встретится символ перехода на новую строку. Если при вводе строки оказалось, что размер памяти, занятой объектом о, недостаточен, она освобождается, и строке выделяется другой участок памяти, имеющий более крупный размер. Затем в него копируется новая строка.

J Функции присваивания

Объекты класса strType можно присваивать двумя способами. Во-первых, объекту класса strType можно присвоить другой объект этого типа. Во-вторых, ему можно

присвоить строку, взятую в кавычки. Для выполнения этих операций предназначены два варианта перегруженной операторной функции operator= ().

II Присвоение объекту класса StrType другого объекта этого типа. StrType StrType::operator=(StrType &o)

{

StrType temp(o.p);

if(o.size > size) {

delete [] p; // Освобождаем память, try {

p = new char[o.size];

} catch (bad_alloc xa) {

cout « "Ошибка при распределении памяти\п"; exit(1);

}

size = о.size;

}

strcpy(p, o.p); strcpy(temp.p, o.p) ;

return temp;

}

II Присвоение объекту класса StrType строки,

II взятой в кавычки.

StrType StrType::operator=(char *s)

{

int len = strlen(s) + 1,-if(size < len) { delete [] p; try {

p = new char[len];

} catch (bad_alloc xa) {

cout << “Ошибка при распределении памяти\п"; exit(1);

}

size = len;

}

strcpy(p, s); return *this;

}

Обе функции сначала проверяют, помещается ли присваиваемый объект в участке памяти, адресованном указателем р. Если нет, старый участок освобождается, и строке выделяется новая область памяти. Затем строка копируется в объект и функция возвращает результат. Таким образом, следующие виды присваивания являются вполне допустимыми.

StrType х("проверка"), у;

у = х; II Объекту класса StrType присваивается другой

II объект класса StrType.

х = "новая строка для объекта х"; // Объекту класса StrType

II присваивается строка, взятая в кавычки.

Каждая из функций присваивания возвращает присваиваемое значение (т.е. значение правого операнда). Это позволяет выполнять цепочки присваивания.

StrType x, у, z; x = у = z = "проверка"

_I Конкатенация

Конкатенация двух строк выполняется с помощью оператора Класс StrType предусматривает три вида конкатенации.

• Конкатенация объекта класса StrType с другим объектом этого типа.

• Конкатенация объекта класса StrType со строкой, взятой в кавычки.

• Конкатенация строки, взятой в кавычки, с объектом класса StrType.

В каждом из этих вариантов оператор “+” возвращает объект класса StrType, являющийся конкатенацией двух операндов. Ни один из этих операндов не модифицируется. Рассмотрим перегруженную операторную функцию operator+().

II Конкатенация двух объектов класса StrType.