Объектно-ориентированное программирование



Объектно-ориентированное программирование - стр. 65


Этот метод переопределяется в классе Two на метод, возвращающий значение 2.

Определим следующие функции:

void directAssign (One x)

  {

          printf(“по значению переменная равна %d \ n”,

            x .value ( ) );

  }

void byPointer (One * x)

  {

          printf(“по  указателю переменная равна %d \ n”,

            x -> value ( ) );

  }

void byReference (One & x)

  {

          printf(“по ссылке переменная равна %d \ n”,

            x .value ( ) );

  }

Эти функции используют в качестве аргумента значение класса One, которое передается соответственно по значению,  через указатель и через ссылку. При выполнении этих функций с аргументом класса Two для первой параметр преобразуется к  классу One, и в результате будет напечатано значение 1. Две другие функции допускают полиморфный аргумент. В обоих случаях переданное значение сохранит свой динамический тип данных, и напечатано будет значение 2.

Язык С++ позволяет нескольким функциям иметь одно имя внутри любого контекста до тех пор, пока списки аргументов функций различаются в достаточной степени, чтобы компилятор недвусмысленно определял, какую именно функцию намереваются вызвать. Такая ситуация, как правило, возникает при использовании нескольких конструкторов для одного и того же класса, каждый из которых имеет свой набор аргументов. Однако таким образом могут описываться любые функции, методы.

Правила для снятия двусмысленности с перегруженных функций являются довольно тонкими, в особенности если разрешено автоматическое приведение типов данных. Один из наиболее важных принципов, которые необходимо помнить: при поиске функции компилятор просматривает наиболее узкую область видимости, в которой определено имя функции, и затем в пределах этой области ищет подходящую функцию, основываясь на типе аргументов. То есть одна функция может скрыть другую с тем же именем, определенную в более широкой области видимости.

 

Шаблоны в языке C++

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




Содержание  Назад  Вперед