Компилятор Делавар. Нововведения в языке. Наследование

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

Нововведения в языке. Наследование

В версии компилятора 0.59 введена возможность простого наследования классов и типов, т.е. один класс (тип) может иметь один класс(тип)-предок. На данный момент, реализовано это следующим образом: ссылочный тип может унаследовать только ссылочный тип, а значимый тип - только значимый тип.

Для указания класса-предка необходимо после имени производного класса ввести через двоеточие имя базового класса. В качестве примера построим небольшую иерархию классов:

  class Figure
  {
     string name;
     Figure ()
     {
        name = "Figure";
     }
     virtual void ToString ()
     {
        printf ( "my name is '%s'\n", name );
     }
     virtual ~Figure ()
     {
        printf ( "call destructor '%s'\n", name );
     }
  }
  class Dot : Figure
  {
     int x, y;
     Dot ()
     {
        name = "Dot";
        x = 0;
        y = 0;
     }
  } 

Здесь класс Dot наследует класс Figure и все его свойства, таким образом из производного класса можно обращаться к поля и методам наследуемого класса. Если в производном классе объявляется поле или метод с одноименным именем в базовом классе, то такое поле или метод базового класса будут перекрыты. В этом случае, компилятор будет использовать одноименные поля и методы производного класса. Для обращения к перекрытым полям и методам базового класса используется ключевое слово base. Рассмотрим следующий пример:

  class employee
  {
     string etype;
     string name;
     employee ()
     {
        etype = "employee";
        name = (string) NULL;
     }
     void ToString ()
     {
        printf ( "I'm %s %s\n", etype, name );
     }
  }
  class manager : employee
  {
     int bonus;
     manager ()
     {
        employee ();
        etype = "manager";
        bonus = 0;
     }
     void ToString ()
     {
        base.ToString ();
        printf ( "My bonus: %d\n", bonus );
     }
  } 

Здесь метод ToString () базового класса Employee перекрыт одноименным методом из производного класса Manager. Метод ToString () производного класса использует функционал перекрытого метода базового класса, обращаясь к нему с помощью ключевого слова base.

В версии 0.62 компилятора Делавар появилась возможность использовать виртуальные методы в пользовательских типах. Для объявления виртуального метода предназначено ключевое слово virtual, указанное в начале определения метода, как это сделано для метода ToString класса Figure. Объявить виртуальным можно также деструктор (см. класс Figure). Также стало возможным приведение производного класса к базовому классу. Доработан вызов конструктора и деструктора по умолчанию при создании и соответственно удалении экземпляра пользовательского типа: вызываются конструкторы и деструкторы всех базовых классов, если имеются.

Примеры программ с использованием наследования находятся в каталоге DC32\EX\INHERIT.

См. также


Яндекс | Картинки | Видео | Карты | Карты ОСМ | Спутник | Гугл | Вольфрам-Альфа | РуВики | EnWiki