Конструкторы и доступность компонентов класса

   
На этом шаге мы рассмотрим специальные компонентные функции, которые называются конструкторами.

   
В определениях классов complex1 и goods
есть недостатки, которые легко устранить. Первый из них - отсутствие автоматической инициализации
создаваемых объектов. Для каждого вновь создаваемого объекта класса complex1 необходимо
вызвать функцию define() либо явным образом с помощью уточненных имен присваивать значения данным
объекта, т.е. переменным real и imag. Еще два способа использованы в предыдущей
программе. Часть объектов класса goods получила начальные значения при инициализации,
которая выполняется по правилам, относящимся к структурам и массивам. Объектам wares[3] и
wares[4] значения присвоены с помощью явного вызова компонентной функции Input().

   
Для инициализации объектов класса в его определение можно явно включать специальную компонентную
функцию, называемую конструктором. Формат определения конструктора в теле
класса может быть таким:

    имя_класса (список_формальных_параметров) 
           {   операторы_тела_конструктора   };

   
Имя этой компонентной функции по правилам языка C++ должно совпадать с именем класса.
Такая функция автоматически вызывается при определении или размещении в памяти с помощью оператора
new каждого объекта класса. Основное назначение конструктора - инициализация объектов.
Для класса complex1 можно ввести конструктор, эквивалентный
функции define(), но отличающийся от нее только названием:

     complex1 (double re = 0.0, double im = 0.0) 
          { real = re; imag = im; }

   
В соответствии с синтаксисом языка для конструктора не определяется тип возвращаемого значения.
Даже тип void недопустим. С помощью параметров конструктору могут быть переданы любые
данные, необходимые для создания и инициализации объектов класса. В конструктор
complex1() передаются значения элементов объекта "комплексное число". По умолчанию
за счет начальных значений параметров формируется комплексное число с нулевыми мнимой и
вещественной частями. В общем случае конструктор может быть как угодно сложным.

   
Для класса "товары на складе магазина" конструктор можно определить следующим
образом:

     goods(char *new_name, float new_price)
     { 
        name = new_name;   // Наименование товара.
        price = new_price; // Закупочная цена.
     }

   
В конструкторе можно было бы изменять и значение заранее инициализированного статического компонента
percent, однако в рассматриваемом примере это не делается.

   
На следующем шаге мы продолжим разговор о конструкторах.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий