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

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

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

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

2017-06-12 328
Определение виртуальных функций и абстрактных базовых классов. 0.00 из 5.00 0 оценок
Заказать работу

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

Для объявления виртуальной функции используется ключевое слово 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)

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

 


Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.