Реферат по предмету "Программирование"


Класс Строка

Класс Строка

Вот довольно реалистичный пример класса 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

  friend
istream& 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* s)

{

  if (p->n >
1) {    // разъединить себя

      p-n--;

      p = new srep;

  }

  else if
(p->n == 1)

      delete
p->s;

  p->s = new
char[ strlen(s)+1 ];

 
strcpy(p->s, s);

  p->n = 1;

  return *this;

}

Благоразумно обеспечить, чтобы присваивание объекта
самому себе работало правильно:

string& string::operator=(string& x)

{

  x.p->n++;

  if (--p->n
== 0) {

      delete
p->s;

      delete p;

  }

  p = x.p;

  return *this;

}

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

ostream& operator

{

  return s
s n

}

Операция ввода использует стандартную функцию ввода
символьной строки.

istream& operator>>(istream& s,
string& x)

{

char buf[256];

s >> buf;

x = buf;

cout

return s;

}

Для доступа к отдельным символам предоставлена операция
индексирования. Осуществляется проверка индекса:

void error(char* p)

{

  cerr

  exit(1);

}

char& string::operator[](int i)

{

  if (is)s[i];

}

Головная программа просто немного опробует действия над
строками. Она читает слова со ввода в строки, а потом эти строки печатает. Она
продолжает это делать до тех пор, пока не распознает строку done, которая
завершает сохранение слов в строках, или не встретит конец файла. После этого
она печатает строки в обратном порядке и завершается.

main()

{

  string x[100];

  int n;

  cout

  for (n = 0;
cin>>x[n]; n++) {

      string y;

      if
(n==100) error("слишком много строк");

      cout


      if (y=="done") break;

  }

  cout

  for (int i=n-1; 0

}
Список литературы

Для подготовки данной работы были использованы материалы
с сайта http://www.realcoding.net


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Untitled Essay Research Paper Yazan Fahmawi
Реферат Ипотечное кредитование в России 5
Реферат Компьютерное сопровождение технологии вышивания крестиком
Реферат Операції комерційного банку в іноземній валюті
Реферат Selfdefense In Criminal Cases Essay Research Paper
Реферат Семантика образов цветов и символика цвета в контексте литературного произведения (на примере произведений русской литературы XIX-XX вв.)
Реферат Общение:застенчивость и обаяние
Реферат Игровые технологии в процессе преподавания иностранных языков
Реферат Айтматов ч. - Проблемы экологии в современной литературе
Реферат Краткий исторический обзор формирования государственного аппарата Китая, правовые основы английской буржуазной революции
Реферат Автоматизация управления внедрением процесса учета заявок ИТ-службы
Реферат Флюороз
Реферат Книжное дело на рубеже тысячелетий
Реферат Общественный строй казахов в XVI–в начале XVIII веков
Реферат The Characterization Of Arthur Dimmesdale Essay Research