BigEdu.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)

Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.

© 2016 - 2022 BigEdu.ru