Программирование >>  Дополнительные возможности наследования 

1 ... 79 80 81 [ 82 ] 83 84 85 ... 265


ДеньЮн

ДопоАнитвдьныв возможности использования функции

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

Как перегружать функции-члены

Как перегружать операторы

Как создавать функции для поддержания классов с динамическим вьщелением памяти для переменных

Перегруженные функции-члены

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

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

Лисшииг 10.1. Перегрузка функциЛ-чиенвв

Листинг 10.1. Перегрузка функций-членов Sinclude <iostream.h>

Объявление класса Rectangle

class Rectangle



8; public;

9; конструкторы

Rectangle(int width, int height); Rectangle(){ }

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

перегрузка функции-члена класса DrawShape void DrawShapeO const;

void DrawShape(int aWidth, int aHeight) const;

private:

int itsWidth; int itsHeight;

Применение конструктора

Rectangle;:Rectangle(int width, int height)

itsWidth = width; itsHeight = height;

>

Перегруженная функция DrawShape - вариант без передачи данных Создание прямоугольника по значениям, заданным по умолчанию void Rectangle::DrawShape() const {

DrawShape( itsWidth, itsHeight);

Перегруженная функция DrawShape - передама двух значений

Создание прямоугольника по значениям, переданным с параметрами

void Rectangle::DrawShape(int width, int height) const

for (int 1 = 0; Kheight; i++) {

for (int j = 0; j< width; ]++) {

cout << * ; }

cout Vn ;

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

int mainO

создание прямоугольника с размерами 30 и 5 Rectangle theRect(30,5); cout DrawShapeO: \n ;



58 59 60 61 62

theRect. DrawShapeO;

cout \nDrawShape(40, 2); \n

theRect.DrawShape(40,2);

return 0;

DrawShape():

***********

*************************** *************************** ***************************

DrawShape(40,2):

************************************************************

ivff-f Листинг 10.1 представляет собой усеченную версию проекта, рассмотрен-!, ного В главе подведения итогов за первую неделю. Чтобы сократить размер программы, был удален блок контроля за соответствием значений заданным типам. Основной код был упрощен до простой выполняемой программы без показа пользовательского меню.

Сейчас для нас важны строки 14 и 15, где происходит перегрузка функции DrawShapeO. Использование перегруженных вариантов этой функции показано далее, в строках с 30 по 50. Обратите внимание, что версия функции DrawShapeO без параметров обращается к варианту функции, содержащей два параметра, и передает в нее текущие значения переменных-членов. При программировании всегда следует избегать дублирования одинаковых программных кодов. В противном случае придется держать в памяти все созданные копии функций, чтобы при изменении программного кода в одной из них внести соответствующие изменения во все копии.

В строках программы с 52 по 62 создается прямоугольный объект и вызывается функция DrawShapeO. В первый раз в функцию не передаются параметры, а во второй раз передается два значения типа unsigned short integer.

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

Использование значений, заданных по умолчанию

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



1 ... 79 80 81 [ 82 ] 83 84 85 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика