Базовый класс координат
class Coord // базовый класс координат
{
protected: // защищённые члены класса
double x , y ; // координаты
public: // открытые члены класса
Coord ( ) { x = 0 ; y = 0 ; } // конструктор базового класса
void Input ( ) ; // объявляет невиртуальную функцию
virtual void Print ( ) ; // объявляет виртуальную функцию
} ;
void Coord :: Input ( ) // позволяет вводить координаты с клавиатуры
{
cout<<"\tx="; cin>>x ; // вводит значение x с клавиатуры
cout<<"\ty="; cin>>y ; // вводит значение y с клавиатуры
}
void Coord :: Print ( ) // выводит значения координат на экран
{
cout<<"\tx="<<x<<"\ty="<<y<<'\n' ;
}
Производный класс точки
class Dot : public Coord // наследник класса координат
{
char name ; // имя точки
public: // открытые члены класса
Dot (char N ) : Coord ( ) { name = N ; } // вызывает конструктор базового класса
void Input ( ) ; // переопределяет невиртуальную функцию
void Print ( ) ; // переопределяет виртуальную функцию
} ;
void Dot :: Input ( ) // позволяет вводить координаты точки с клавиатуры
{
char S [ ] ="Введите координаты точки "; // объявляет и инициализирует строку приглашения
CharToOem ( S , S ) ; // преобразует символы строки в кириллицу
cout<<S<<name<<'\n'; // выводит на экран заголовок и имя точки
Coord :: Input ( ) ; // вызывает функцию базового класса
}
void Dot :: Print() // выводит значения координат точки на экран
{
char S [ ] ="Координаты точки "; // объявляет и инициализирует строку заголовка
CharToOem ( S , S ) ; // преобразует символы строки в кириллицу
cout<<S<<name<<" :"; // выводит на экран заголовок и имя точки
Coord :: Print ( ) ; // вызывает функцию базового класса
}
Производный класс вектора
class Vec : public Coord // наследник класса координат
{
char name [ 3 ] ; // имя вектора
public: // открытые члены класса
Vec ( char* pName ) : Coord ( ) { strncpy ( name , pName , 3 ) ; name [ 2 ] = '\0' ; }
void Input ( ) ; // переопределяет невиртуальную функцию
void Print ( ) ; // переопределяет виртуальную функцию
} ;
void Vec :: Input() // позволяет вводить проекции вектора с клавиатуры
{
char S [ ] ="Введите проекции вектора "; // объявляет и инициализирует строку приглашения
CharToOem ( S , S ) ; // преобразует символы строки в кириллицу
cout<<S<<name<<'\n'; // выводит на экран приглашение и имя вектора
Coord :: Input ( ) ; // вызывает функцию базового класса
}
void Vec :: Print ( ) // выводит значения проекций вектора на экран
{
char S [ ] = "Проекции вектора "; // объявляет и инициализирует строку заголовка
CharToOem ( S , S ) ; // преобразует символы строки в кириллицу
cout<<S<<name<<" :"; // выводит на экран заголовок и имя вектора
Coord :: Print ( ) ; // вызывает функцию базового класса
}
В приведённом примере объявлен базовый класс Coord и два производных класса Dot и Vec. Функция Print ( ) в производных классах является виртуальной, так как она объявлена виртуальной в базовом классе Coord. Функция Print ( ) в производных классах Dot и Vec переопределяет функцию базового класса. Если производный класс не предоставляет переопределенной реализации функции Print ( ), используется реализация по умолчанию из базового класса.
Дата добавления: 2016-10-17; просмотров: 533;