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


Класс Строка

Класс Строка

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

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

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

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

Реферат A Rose For Emily 2 Essay Research
Реферат Ям
Реферат Особливості системи контролю за навчально виховним процесом у сучасній загальноосвітній школі
Реферат Расчет технологических показателей работы свиноводческого комплекса мощностью 21 тысяча голов откормочного молодняка свиней с законченным оборотом стада
Реферат История Замбии
Реферат Measuring WellBeing Essay Research Paper MEASURING ECONOMIC
Реферат Технология производства и декорирования древнегреческой керамики
Реферат Тайны Красной планеты
Реферат Совершенствование организационно-экономической системы управления государственными пакетами акций
Реферат Truth Disguised By Words Essay Research Paper
Реферат Люблю тебя, мой край родной, Астрахань
Реферат Euthanasia Essay Research Paper Under the Canadian
Реферат Edgar Allan Poe Life And Works Essay
Реферат 4. Модель «цивилизационного смещения» в процессе принятия стратегических решений (демонстрация межперсонажного взаимодействия)
Реферат Морфологические признаки и функциональные свойства вымени коров-первотелок