ReferatWorld.ru

Методы программирования в C++

Содержание:

1. Статические элементы класса

2. Виртуальные функции

3. Абстрактные классы

4. Виртуальные классы

5. Шаблоны

6. Обработка исключительных ситуаций в C++


1. Статические элементы класса

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

class Name

{ …

public:

…

static int count; }

Для элементов, которые объявлены в открытой секции класса, вызов, например, будет выглядеть следующим образом:

Name::count+=2;

Если элементы определены в закрытой секции, то такое обращение некорректно.

Если мы объявили такой элемент в закрытой секции класса, то мы должны определить функции для работы с этими элементами. Обращение к таким функциям выглядит так: Name::Add1();

ПРАВИЛО:

1) Статические функции и элементы класса не ассоциируются с отдельными представителями класса. Обращение к ним производится выражением вида:

имя класса:: имя элемента

2) Им не передается указатель this, т.к. он ассоциируется с отдельным представителем класса.

3) Статические функции могут вызываться независимо от того, существует ли хотя бы один представитель класса.

4) Статические функции не могут быть виртуальными.

2. Виртуальные функции

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

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

Объявление виртуальной функции в классе:

virtualпрототип_функции;

Отметим, что классы, включающие такие функции, играют особую роль в объектно-ориентированном программировании. Именно поэтому они носят специальное название – полиморфные.

Вернемся к упомянутому выше примеру с фигурами. Рассмотрим класс Point(производный от Location).

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

class Point: public Location{

protected:

Boolean vis;

public:

Point (int nx,int ny);

virtual void Show();

virtual void Hide();

virtual void Drag(int by);

Boolean Isvis() { return vis;}

void MoveTo (int nx ,int ny); };

Виртуальными могут быть не любые функции, а только нестатические компонентные функции какого-либо класса. После того как функция определена как виртуальная, ее повторное определение в производном классе (с тем же самым прототипом) создает в этом классе новую виртуальную функцию, причем спецификатор virtual может не использоваться.

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

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

Рассмотрим, как будет выглядеть вызов виртуальной функции voidShow() в производном классе:

class Circle : public Point {

protected:

int R;

public:

Circle (int nx,int ny, int nr);

void Show();

void Hide();

void Expand(int by);

voidContract(intby); };

Как мы видим, спецификатор virtual можно уже не указывать.

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

Все выше сказанное можно объединить в ПРАВИЛА:

1) не объявлять static;

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

3) Виртуальная функция должна быть обязательно определена или быть чистой виртуальной функцией.

Чистой виртуальной функцией называется компонентная функция, которая имеет следующее

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Рефераты по информатике и программированию Содержание: 1. Статические элементы класса 2. Виртуальные функции 3. Абстрактные классы 4. Виртуальные классы 5. Шаблоны 6. Обработка
Оценок: 1003 (Средняя 5 из 5)

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

© 2017 - 2022 ReferatWorld.ru