Категория
Информатика
Тип
реферат
Страницы
2 стр.
Дата
09.12.2009
Формат файла
.rtf — Rich Text Format (Wordpad)
Архив
20814.zip — 4.06 kb
  • klass-stroka_20814_1.rtf — 17.15 Kb
  • Readme_docus.me.txt — 125 Bytes
Оцените работу
Хорошо  или  Плохо


Текст работы

Класс Строка Alena Alena
Класс
Строка
Вот довольно реалистичный пример класса string. В нем производится учет ссылок на строку с целью минимизировать копирование и в качестве констант применяются стандартные символьные строки C++.
#include
#include
class string
struct srep
char* s; // указатель на данные
int n; // счетчик ссылок
;
srep *p;
public:
string(char *); // string x = "abc"
string(); // string x;
string(string &); // string x = string ...
string& operator=(char *);
string& operator=(string &);
~string();
char& operator[](int i);
friend ostream& operator(istream&, string&);
friend int operator==(string& x, char* s)
return strcmp(x.p->s, s) == 0;
friend int operator==(string& x, string& y)
return strcmp(x.p->s, y.p->s) == 0;
friend int operator!=(string& x, char* s)
return strcmp(x.p->s, s) != 0;
friend int operator!=(string& x, string& y)
return strcmp(x.p->s, y.p->s) != 0;
;
Конструкторы и деструкторы просты (как обычно):
string::string()
p = new srep;
p->s = 0;
p->n = 1;
string::string(char* s)
p = new srep;
p->s = new char[ strlen(s)+1 ];
strcpy(p->s, s);
p->n = 1;
string::string(string& x)
x.p->n++;
p = x.p;
string::~string()
if (--p->n == 0)
delete p->s;
delete p;
Как обычно, операции присваивания очень похожи на конструкторы. Они должны обрабатывать очистку своего первого (левого) операнда:
string& string::operator=(char*



Ваше мнение



CAPTCHA