Определение виртуальных функций и абстрактных базовых классов.

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

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

· класс, содержащий виртуальную функцию, базовый в иерархии порождения;

· реализация функции зависит от класса и будет различной в каждом порожденном классе.

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

Абстрактные базовые классы

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

Чистая виртуальная функция — это функция-член класса, тело которой не определено.

В базовом классе такая функция записывается следующим образом:

virtual Прототип Функции = 0;

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

4.7. Осуществить реализацию объектно-ориентированного программирования на языке С++.

/В программе объявлен класс простых дробей,

//описана переменная этого класса, выполнена

//обработка переменной

#include <iostream.h>

#include <math.h>

struct Frac{int P; int Q;};

Frac F;

//Объявление класса

class Drob{

Frac A;

public:

void Vvod(void);

int NOD(void);

void Sokr(void);

void Stepen(int N);

void Print(void);

};

//Описания функций — членов класса

void Drob::Vvod(void)

{ сои!«"Числитель?"; cin»A.P;

cout«"Знаменатель?"; cin»A.Q;

}

int Drob::NOD(void)

{ int M,N;

M=abs(A.P); N=A.Q;

while(M!=N)

{ if(M>N)

if(M%N!=0) M=M%N; else M=N;

else if(N%M!=0) N=N%M; else N=M;

}

return M;

}

void Drob::Sokr(void)

{ int X;

X=NOD();

if(A.P!=0)

{ A.P=A.P/X; A.Q=A.Q/X;}

else A.Q=1;

}

void Drob::Stepen(int N)

{ int i;

F.P=F.Q=1;

for(i=l;i<=N;i++)

{ F.P*=A.P; F.Q*=A.Q;}

}

void Drob::Print(void)

{ cout«"\n"«A.P«"/"«A.Q«"\n"; }

//Основная функция

void main(void)

{ Drob Y; //Объявление объекта

cout«"Вводите дробь ! "<<"\n";

Y.VvodO ;

Y.Sokr () ;

cout«"flpo6b после сокращения:"<<"\n" ;

Y . P r i n t ( ) ;

Y.Stepen(2);

cout<<"flpo6b, возведенная в

квадрат:"<<"\п";

c o u t « F . P « " / " « F . Q « " \ n " ;

Данная программа наглядно показывает пример реализации объектно-ориентированного программирования на языке С++.

Проведение компилирования программы и

Сборки исполняемого модуля.

Компилятор — программа, выполняющая компиляцию. На данный момент среди начинающих наиболее популярными компиляторами C/C++ являются GNU g++ (и его порты под различные ОС) и MS Visual Studio C++ различных версий.

При компилировании программы проверяется правильность ее написания. При ошибках в коде или при работе неправильно написанной программы будут выдаваться сообщения об ошибках. Согласно справочному руководству ошибки бывают четырех видов:

1. "ОШИБКА СИНТАКСИСА" (SYNTAX ERROR)

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

2. "НЕСООТВЕТСТВИЕ ПАРАМЕТРОВ" (PARAMETER MISMATCH)

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

3. "ПРЕДУПРЕЖДЕНИЕ РЕЖИМА ВЫПОЛНЕНИЯ" (RUNTIME WARNING)

Предупреждения выводятся с целью предотвращения ошибок, но не всегда требуют какого-либо внимания.

4. "ОШИБКА РЕЖИМА ВЫПОЛНЕНИЯ" (RUNTIME ERROR)

Такая ошибка возникает во время работы программы. Она приводит к невозможности ее дальнейшей работы и к закрытию приложения.

Наши рекомендации