Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Виртуальные функции (virtual functions).

Читайте также:
  1. III Непрерывность дифференцируемой функции
  2. III. Функции Бюро контрольных работ
  3. IV. Основные функции участников
  4. Автокорреляционная функция ЛЧМ-сигнала. Сечения функции неопределенности ЛЧМ-сигнала. Выбор класса зондирующих сигналов для РЛС.
  5. Асимптоты графика функции
  6. Аспекты структуры типа ИМ (функции)
  7. Б. Регенерация нервных волокон как фактор, способствующий восстановлению нарушенной функции.

В С++ эта возможность является результатом позднего связывания; при этом адреса определяются динамически при выполнении программы, а не статически, во время компиляции — как в обычных транслируемых языках. Статический (фиксированный) процесс часто называют ранним связыванием. Имена функций при этом заменяются адресами памяти. Позднее связывание осуществляется при помощи виртуальных функций, которые определяются в родительском классе, в то время как последующие производные классы перегружают их, переопределяя реализацию конкретной функции. При использовании виртуальных функций сообщения передаются не непосредственно объекту, а в виде указателя, ссылающегося на объект.

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

 

 

3. Первый взгляд на классы С++. Структура как простейший класс. Синтаксис и правила для классов С++. Простой класс С++.

Первый взгляд на классы С++.

Тип С++ clаss является расширением типа С struct.

Структура как простейший класс.

Во многом структура в С++ напоминает простейший вид класса. Для ее определения используется ключевое слово struct.

#include <iostream>

using namespace std;

struct math_operations

{

double data_value;

 

void set_value(double ang) {data_value=ang;};};

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

Класс может иметь данные-члены и функции-члены. По умолчанию при объявлении С++ struct данные и функции-члены имеют тип public (раздел public содержит данные и функции, которые доступны извне структуры).

Для доступа к функциям-членам структуры обычно используется операция "точка" (.). Структуре или классу можно назначить переменные-указатели — тогда используется операция "стрелка" (->).

Синтаксис и правила для классов С++.

Описание класса С++ начинается с ключевого слова class. Затем сразу же следует имя класса (теговый тип).

class тип {

тип переменная1

тип переменная2

public:

функция-член1

функция-член2

 

} имя, связанное с типом класса;

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

Функции-члены обычно следуют за объявлением public. Благодаря этому, к ним можно обращаться из внешних для класса процедур. Все функции-члены класса имеют доступ к любым разделам этого класса: public, private и protected.

Простой класс С++.

По умолчанию элементы класса С++ имеют локальную видимость. Это означает, что переменные-члены доступны только функциям-членам этого класса. Если функции-члены должны иметь видимость за пределами класса, то это нужно указать явно.


Дата добавления: 2015-12-08; просмотров: 70 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.011 сек.)