Читать «Полный справочник по С++» онлайн - страница 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 Присваивание строки, взятой в кавычки,