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

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

StrType operator-(StrType &o); II Вычитание подстроки.

StrType operator-(char *s); II Вычитание строки,

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

II Операторы сравнения объектов класса StrType. int operator==(StrType &o) { return !strcmp(p, o.p); }

int operator!=(StrType &o) { return strcmp(p, o.p); }

int operator<(StrType &o) { return strcmp(p, o.p) < 0; }

int operator>(StrType &o) { return strcmp(p, o.p) >0; }

int operator<=(StrType &o) { return strcmp(p, o.p) <=0; }

int operator>=(StrType &o) { return strcmp(p, o.p) >= 0; }

II Операции сравнения объектов класса StrType

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

int operator==(char *s) { return !strcmp(p, s); }

int operator!=(char *s) { return strcmp(p, s); }

int operator<(char *s) { return strcmp(p, s) < 0; }

int operator>(char *s) { return strcmp(p, s) >0; }

int operator<=(char *s) { return strcmp(p, s) <= 0; }

int operator>=(char *s) { return strcmp(p, s) >= 0; }

int strsizeO { return strlen(p); } // Возвращает размер строки, void makestr(char *s) { strcpy(s, p); } II Обычная строка,

II завершающаяся нулевым байтом, operator char *() { return p; } // Преобразование в тип char *.

} ;

II Без явной инициализации.

StrType::StrType() {

size =1; II Создаем место для нулевого символа, try {

р = new char[size];

} catch (bad_alloc xa) {

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

}

Strcpy(p, ■■);

II Инициализация с помощью строки, взятой в кавычки.

StrType::StrType(char *str) {

size = strlen(str) + 1; // Создаем место для нулевого символа, try {

р = new char[size];

} catch (bad_alloc xa) {

cout « "Allocation error\n"; exit(1);

}

strcpy(p, str);

II Инициализация с помощью объекта класса StrType. StrType::StrType(const StrType &o) { size = o.size; try {

p = new char[size];

} catch (bad_alloc xa) {

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

}

strcpy(p, o.p);

II Вывод строки.

ostream &operator«(ostream &stream, StrType &o)

{

stream « o.p; return stream;

II Ввод строки.

istream &operator>>(istream istream, StrType &o)

{

char t[255]; II Размер выбран произвольно -

II при желании его можно изменить.

int 1еп,-

stream.getline(t, 255); len = strlen(t) + 1;

if(len > o.size) { delete [] o.p; try {

o.p = new char[len];

} catch (bad_alloc xa) {

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

}

o.size = len;

}

strcpy(о.p, t); return stream;

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

II другого объекта этого типа.

StrType StrType::operator=(StrType &o)

{

StrType temp(o.p);

if(o.size > size) {

delete [] p; II Освобождаем старую область памяти, try {

р = new char[о.size];

} catch (bad_alloc xa) {

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

}

size = о.size;

}

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

return temp;

}

II Присваивание строки, взятой в кавычки,