Объектно-ориентированное программирование на языке С++. Ноткин А.М. - 20 стр.

UptoLike

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

21
Base(); // конструктор по умолчанию
Base(const Base&); // конструктор копирования
virtual ~Base(); // виртуальный деструктор
virtual void Show()=0; // чистая виртуальная функция
// другие чистые виртуальные функции
protected: // защищенные члены класса
private:
// часто остается пустым, иначе будет мешать будущим разработкам
};
class Derived: virtual public Base{
public:
Derived(); // конструктор по умолчанию
Derived(const Derived&); // конструктор копирования
Derived(параметры); // конструктор с параметрами
virtual ~Derived(); // виртуальный деструктор
void Show(); // переопределенная виртуальная функ-
ция
// другие
переопределенные виртуальные функции
// другие перегруженные операции
protected:
// используется вместо private, если ожидается наследование
private:
// используется для деталей реализации
};
Объект абстрактного класса не может быть формальным параметром
функции, однако формальным параметром может быть указатель на абст-
рактный класс. В этом случае появляется возможность передавать в вызы-
ваемую функцию в качестве фактического параметра
значение указателя
на производный объект, заменяя им указатель на абстрактный базовый
класс. Таким образом мы получаем полиморфные объекты.
Абстрактный метод может рассматриваться как обобщение переоп-
ределения. В обоих случаях поведение родительского класса изменяется
для потомка. Для абстрактного метода, однако, поведение просто не опре-
делено. Любое поведение задается в производном классе
.
Одно из преимуществ абстрактного метода является чисто концепту-
альным: программист может мысленно наделить нужным действием абст-
ракцию сколь угодно высокого уровня. Например, для геометрических фи-
гур мы можем определить метод Draw, который их рисует: треугольник
TTriangle, окружность TCircle, квадрат TSquare. Мы определим аналогич-
ный метод и для абстрактного родительского класса
TGraphObject. Однако
такой метод не может выполнять полезную работу, поскольку в классе
                                     21

      Base();              // конструктор по умолчанию
      Base(const Base&); // конструктор копирования
      virtual ~Base(); // виртуальный деструктор
      virtual void Show()=0; // чистая виртуальная функция
      // другие чистые виртуальные функции
      protected: // защищенные члены класса
      private:
      // часто остается пустым, иначе будет мешать будущим разработкам
      };
      class Derived: virtual public Base{
      public:
      Derived();                     // конструктор по умолчанию
      Derived(const Derived&);       // конструктор копирования
      Derived(параметры);            // конструктор с параметрами
      virtual ~Derived();             // виртуальный деструктор
      void Show();                      // переопределенная виртуальная функ-
ция
      // другие переопределенные виртуальные функции
      // другие перегруженные операции
      protected:
      // используется вместо private, если ожидается наследование
      private:
      // используется для деталей реализации
      };
      Объект абстрактного класса не может быть формальным параметром
функции, однако формальным параметром может быть указатель на абст-
рактный класс. В этом случае появляется возможность передавать в вызы-
ваемую функцию в качестве фактического параметра значение указателя
на производный объект, заменяя им указатель на абстрактный базовый
класс. Таким образом мы получаем полиморфные объекты.
      Абстрактный метод может рассматриваться как обобщение переоп-
ределения. В обоих случаях поведение родительского класса изменяется
для потомка. Для абстрактного метода, однако, поведение просто не опре-
делено. Любое поведение задается в производном классе.
      Одно из преимуществ абстрактного метода является чисто концепту-
альным: программист может мысленно наделить нужным действием абст-
ракцию сколь угодно высокого уровня. Например, для геометрических фи-
гур мы можем определить метод Draw, который их рисует: треугольник
TTriangle, окружность TCircle, квадрат TSquare. Мы определим аналогич-
ный метод и для абстрактного родительского класса TGraphObject. Однако
такой метод не может выполнять полезную работу, поскольку в классе