Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
51
Добавлен:
16.02.2016
Размер:
382.98 Кб
Скачать

Пример:

// А - базовый класс, В - производный класс; рА и рВ - указатели на объект

class A

{public:

int AComponent;

int AMemberFunc();

};

class В : public A {public:

int BComponent;

int BMemberFunc();

};

В bObject; // Объект класса В.

A *pA = &bObject; // Этот указатель ограничивает доступ к

// членам класса В: BComponent и // BMemberFunc и допускает только доступ // к членам базового класса.

В *рВ = &bObject; // Разрешен доступ как к членам класса В,

// так и к членам класса А.

pA->AMemberFunc(); // Правильно: функция-член класса А.

pB->AMemberFunc(); // Правильно: наследуется от класса А.

pA->BMemberFunc(); // Ошибка: нет в классе А.

Любое выражение, имеющее тип массива, может быть преобразовано к указателю того же типа. Результатом будет указатель на первый элемент массива.

Пример:

char szPath[_MAX_PATH]; // Массив типа char.

char *pszPath = szPath; // Указатель на массив. Эквивалентно &szPath[0].

C++ не поддерживает стандартное преобразование данных типа const или . volatile к любому типу, не являющемуся также const или volatile. Однако это может быть выполнено посредством явного приведения типов. Отметим, что указатели на члены (класса, структуры) не могут рассматриваться как обычные указатели (в отличие от указателей на статические члены) и для них не выполняется стандартное преобразование.

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

Функции

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

Любая используемая в модуле компиляции функция должна иметь прототип, включающий в себя тип функции, имя функции и список параметров с их типами. Прототип функции завершается символом ;.

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

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

Функция может иметь модификатор доступа:

  • external - определяет доступность из любых модулей приложения (по умолчанию);

  • static - ограничивает доступ только текущим модулем компиляции.

Метод-член класса может иметь модификаторы доступа public, protected и private.

Прототип и объявление функции могут иметь следующее формальное описание:

//Прототип функции

модификатор_доступа тип имя_функции(список_параметров);

//Описание функции

модификатор_доступа тип имя_функции(список_параметров)

{тело_функции}

// список_параметров:

// тип парам 1, тип парам2

// тип парам 1, тип парам2, тип парамЗ=значение значение

параметра по умолчанию

// тип парам1, тип парам2,... переменное число параметров

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

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

тип *имя_функции(список_параметров).

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

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

Язык C++ допускает рекурсивный вызов функций.

Соседние файлы в папке VC++Баженова