Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 33 стр.

UptoLike

Составители: 

ются способы конструирования объектов по различным исходным
данным.Вот довольно реалистичный класс строк string.В нем
производится учет ссылок на строку с целью минимизировать ко-
пирование полей данных.Класс имеет три конструктора и две
операции присваивания,учитывающие разнообразие типов данных:
class string /*-класс объектов из строк и счетчиков: */
{ struct srep /*-представление строки данных: */
{ char* s;/*-указатель строки данных; */
int n;/*-счетчик числа ссылок строки; */
};/*-конец определения типа структуры; */
srep* p;/*-указатель на представляющую структуру; */
public:
string(); /*-конструктор с пустыми данными; */
string(char*); /*-конструктор по строке данных; */
string(string&);/*-конструктор по объекту string; */
string& operator=(char*); /*-присваивание данных;*/
string& operator=(string&);/*-присваивание объекта*/
~string(); /*-деструктор класса; */
}; /*-конец определения класса объектов string; */
string::string() /*-конструктор с пустыми данными; */
{ p=new srep;/*-выделение места для s и n; */
p->s=0;/*-нулевой указатель(нет данных); */
p->n=1;/*-данный объект ссылается на s; */
} /*-конец определения пустого конструктора;*/
string::string(char*s)/*-конструктор по строке данных; */
{ p=new srep;/*-выделение места для s и n; */
p->s=new char[strlen(s)+1];/*-для данных; */
strcpy(p->s,s);/*-копирование данных; */
p->n=1;/*-данный объект ссылается на s; */
} /*-конец определения конструктора char*; */
string::string(string& x) /*-конструктор-копия объекта; */
{ x.p->n++;/*-учет ссылок в объекте x; */
p=x.p;/*-новый объект - это ссылка на па- */
/* ру: данные - счетчик объекта x; */
} /*-конец определения конструктора копии; */
33
ются способы конструирования объектов по различным исходным
данным.Вот довольно реалистичный класс строк string.В нем
производится учет ссылок на строку с целью минимизировать ко-
пирование полей данных.Класс имеет три конструктора и две
операции присваивания,учитывающие разнообразие типов данных:


  class string /*-класс объектов из строк и счетчиков:           */
        { struct srep /*-представление строки данных:            */
                 { char* s;/*-указатель строки данных;           */
                      int   n;/*-счетчик числа ссылок строки;    */
                 };/*-конец определения типа структуры;          */
          srep* p;/*-указатель на представляющую структуру; */
    public:
          string();          /*-конструктор с пустыми данными; */
          string(char*);     /*-конструктор по строке данных;    */
          string(string&);/*-конструктор по объекту string; */
          string& operator=(char*);     /*-присваивание данных;*/
          string& operator=(string&);/*-присваивание объекта*/
         ~string();                     /*-деструктор класса;    */
        }; /*-конец определения класса объектов string;          */


  string::string() /*-конструктор с пустыми данными;             */
                { p=new srep;/*-выделение места для s и n;       */
                  p->s=0;/*-нулевой указатель(нет данных);       */
                  p->n=1;/*-данный объект ссылается на s;        */
                } /*-конец определения пустого конструктора;*/
  string::string(char*s)/*-конструктор по строке данных;         */
                { p=new srep;/*-выделение места для s и n;       */
                  p->s=new char[strlen(s)+1];/*-для данных; */
                  strcpy(p->s,s);/*-копирование данных;          */
                  p->n=1;/*-данный объект ссылается на s;        */
                } /*-конец определения конструктора char*;       */
  string::string(string& x) /*-конструктор-копия объекта;        */
                { x.p->n++;/*-учет ссылок в объекте x;           */
                  p=x.p;/*-новый объект - это ссылка на па- */
                            /* ру: данные - счетчик объекта x;   */
                } /*-конец определения конструктора копии;       */


                                33