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

UptoLike

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

26
3.4. Определение компонентных функций класса
Компонентные функции класса могут быть определены как в теле класса
(такой способ использован во всех приведенных примерах), так и за телом класса
на внешнем уровне программы. Для методов класса, определенных внутри тела
класса, компилятор применяет модификатор inline, то есть объявляет такие мето-
ды встраиваемыми (подставляемыми)
функциями. Таким образом, на эти функции
накладываются ограничения, аналогичные ограничениям для inline-функций (не
могут содержать циклов, оператор-переключатель и оператор безусловного пере-
хода, не могут быть рекурсивными и т.д.). Если метод класса определен в теле
класса и не удовлетворяет какому-либо из перечисленных условий (например, со-
держит оператор цикла for
), то компилятор транслирует данный метод как обыч-
ную, не подставляемую функцию, при этом выводя предупреждение времени
компиляции (в BC++ v5.02 «Functions containing for are not expanded inline»). Для
компонентных функций, определенных вне тела класса, никаких ограничений не
существует, подставляемыми по умолчанию они не объявляются и предупрежде-
ний при их компиляции не возникает.
При объявлении метода вне тела класса внутри
класса помещается лишь
прототип метода, а на внешнем уровне программы вслед за объявлением класса
помещается определение функции в виде:
тип_функции имя_класса :: имя_метода (список_формальных_параметров)
{тело метода}
Для класса array на внешнем уровне можно определить функции ReadMas и
WriteMas, поскольку они содержат циклы.
// Листинг 11. Определение метода класса на внешнем уровне
class array
{ …
public:
….
void ReadMas();
void WriteMas();
      3.4. Определение компонентных функций класса


      Компонентные функции класса могут быть определены как в теле класса
(такой способ использован во всех приведенных примерах), так и за телом класса
на внешнем уровне программы. Для методов класса, определенных внутри тела
класса, компилятор применяет модификатор inline, то есть объявляет такие мето-
ды встраиваемыми (подставляемыми) функциями. Таким образом, на эти функции
накладываются ограничения, аналогичные ограничениям для inline-функций (не
могут содержать циклов, оператор-переключатель и оператор безусловного пере-
хода, не могут быть рекурсивными и т.д.). Если метод класса определен в теле
класса и не удовлетворяет какому-либо из перечисленных условий (например, со-
держит оператор цикла for), то компилятор транслирует данный метод как обыч-
ную, не подставляемую функцию, при этом выводя предупреждение времени
компиляции (в BC++ v5.02 «Functions containing for are not expanded inline»). Для
компонентных функций, определенных вне тела класса, никаких ограничений не
существует, подставляемыми по умолчанию они не объявляются и предупрежде-
ний при их компиляции не возникает.
      При объявлении метода вне тела класса внутри класса помещается лишь
прототип метода, а на внешнем уровне программы вслед за объявлением класса
помещается определение функции в виде:
      тип_функции имя_класса :: имя_метода (список_формальных_параметров)
      {тело метода}
      Для класса array на внешнем уровне можно определить функции ReadMas и
WriteMas, поскольку они содержат циклы.
// Листинг 11. Определение метода класса на внешнем уровне
       class array
       {…
        public:
          ….
         void ReadMas();
         void WriteMas();
                                            26