Объектно-ориентированное программирование на C++. Андрианова А.А - 195 стр.

UptoLike

Объектно-ориентированное программирование на С++
В классе Constraint используется принцип полиморфизма при
работе с объектами функций левой части ограничения. Класс содержит
указатель на абстрактный класс Function, который может хранить
адрес объекта класса Line, Ellipse, Hyperbola или Parabola,
задающего конкретную функцию. При вводе ограничения у пользователя
запрашивается вид нужной функции и создается объект
соответствующего класса, адрес которого сохраняется в переменной-
указателе function. При вызове методов Input(), Output() и
Calculate(Point) через указатель function будут вызываться
виртуальные функции того класса, адрес которого хранится в function.
Такие вызовы выполняются как в функциях ввода/вывода ограничения,
так и в методах проверки выполнения некоторых условий для точки.
Таким образом, анализировать в этих методах тип функции левой части
ограничения уже не потребуется.
Приведем далее определение методов класса Constraint и
дружественных ему функций.
// функция, определяющая оператор ввода ограничения
istream& operator >> (istream& in, Constraint& ob)
{
int choice;
// ввод типа ограничения
while(true)
{
cout << "Линейная - 1,
Эллиптическая - 2,
Гиперболическая - 3,
Параболическая - 4";
in >> choice;
if(choice >= 1 && choice <= 4)
break;
}
// создание объекта функции левой части ограничения
// в зависимости от введенного типа
switch(choice)
{
case 1:
ob.function = new Line(); break;
case 2:
ob.function = new Ellipse(); break;
case 3:
ob.function = new Hyperbola(); break;
195
                           Объектно-ориентированное программирование на С++

    В классе Constraint используется принцип полиморфизма при
работе с объектами функций левой части ограничения. Класс содержит
указатель на абстрактный класс Function, который может хранить
адрес объекта класса Line, Ellipse, Hyperbola или Parabola,
задающего конкретную функцию. При вводе ограничения у пользователя
запрашивается    вид    нужной    функции     и    создается   объект
соответствующего класса, адрес которого сохраняется в переменной-
указателе function. При вызове методов Input(), Output() и
Calculate(Point) через указатель function будут вызываться
виртуальные функции того класса, адрес которого хранится в function.
Такие вызовы выполняются как в функциях ввода/вывода ограничения,
так и в методах проверки выполнения некоторых условий для точки.
Таким образом, анализировать в этих методах тип функции левой части
ограничения уже не потребуется.
    Приведем далее определение методов класса Constraint и
дружественных ему функций.

     // функция, определяющая оператор ввода ограничения
     istream& operator >> (istream& in, Constraint& ob)
     {
          int choice;
          // ввод типа ограничения
          while(true)
          {
               cout << "Линейная - 1,
                         Эллиптическая - 2,
                        Гиперболическая - 3,
                        Параболическая - 4";
               in >> choice;
               if(choice >= 1 && choice <= 4)
                    break;
          }
          // создание объекта функции левой части ограничения
          // в зависимости от введенного типа
          switch(choice)
          {
          case 1:
               ob.function = new Line(); break;
          case 2:
               ob.function = new Ellipse(); break;
          case 3:
               ob.function = new Hyperbola(); break;

                                                                       195