Шпаргалка по "Программированию"

Автор: Пользователь скрыл имя, 08 Ноября 2011 в 12:07, шпаргалка

Краткое описание

Работа содержит ответы на вопросы по дисциплине "Программирование".

Файлы: 1 файл

default.doc

— 264.50 Кб (Скачать)

      Point (T * ptr = 0);

      Point(const Point & );

      ~Point();

      Point & operator =(const Point &);

      T * operator->() const;

      T & operator*() const;

      void get_count() {cout<<StatPtr->Count<<endl;}

};

template<typename T>

Point<T>::Point(T * ptr)

{ if(!ptr)

            StatPtr = NULL;

      else

      { StatPtr = new Status <T>; StatPtr->RealPtr=ptr; StatPtr->Count = 1;

      }

}

template <typename T>

Point<T>::Point(const Point & p): StatPtr(p.StatPtr)

{ if(StatPtr) StatPtr->Count++;

}

template <typename T>

Point<T>::~Point()

{ if(StatPtr)

      { StatPtr->Count--;

            if(StatPtr->Count <= 0)

            {delete StatPtr->RealPtr; delete StatPtr;

            }

      }

}

template <typename T>

T * Point <T>::operator->() const

{ if(StatPtr)

            return StatPtr->RealPtr;

      else  return NULL;

}

 
 

template <typename T>

T & Point<T>::operator *() const

{ if(StatPtr) return *StatPtr->RealPtr;

      else throw "Opps";

}

template <typename T>

Point<T> & Point<T>::operator =(const Point & p)

{ if(StatPtr)

      {StatPtr->Count--;

            if(StatPtr->Count <= 0)

            {delete StatPtr->RealPtr;  delete StatPtr;

            }

      }

      StatPtr = p.StatPtr;

      if(StatPtr) StatPtr->Count++;  return * this;

}

struct Str

{  int a;

   char c;

};

int main()

{ Point<Str> pt1(new Str); // генерация класса Point, конструирование

                                          // объекта pt1, инициализируемого указателем 

                                          // на структуру Str, далее с объектом  можно  

                                          // обращаться как с указателем 

  Point<Str> pt2=pt1,pt3;   // для pt2 вызывается конструктор копирования, 

                                          // затем создается указатель pt3 

  pt3=pt1;                           // pt3 переназначается на объект  указателя pt1

  (*pt1).a=12;                     // operator*() получает this указатель на pt1

  (*pt1).c='b';

  int X=pt1->a;                   // operator->() получает this-указатель на pt1

  char C=pt1->c;

   return 0:

}

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

47.Свойства в С++.

В  общем  случае,  свойство −  это пара функций  (public),  одна из  которых отвечает  за  установку  компонент-данных  (private)  объекта,  а  другая  за их  считывание. Такое решение позволяет обеспечить инкапсуляцию данных. Необходимость использования  свойств возникает  тогда, когда при изменении некоторого параметра требуется произвести ещё некоторые действия.

Наиболее простой  способ обеспечения инкапсуляции в C++ заключается в написании пары функций  типа get_val() и put_val() для каждого  параметра.

 
 

Модификатор _declspec получил дополнительный параметр «property». Это позволяет

в классе объявить «виртуальную» переменную и связать  её с соответствующими

функциями.

class cls

{  int m;

public:

    _declspec(property(get=get_val, put=put_val)) int V;

    int get_val()

    { return m; }

    void put_val(int v)

    { m = v; }

};

Мэин:

cls  obj;

obj.V = 50;       // при этом выполняется вызов  put_val()

int k = obj.V;    // при этом выполняется вызов  get_val()

 

Основной недостаток:

Зависимость от компилятора. Нарушается инкапсуляция

Информация о работе Шпаргалка по "Программированию"