Float fn(float x); // прототип

{

// Определение функции

}

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

Пример 2

int printf(const char *format,...);

Компилятор C++ позволяет объявлять более одной функции под одним и тем же именем, если у них различные списки аргументов.

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

 


 


Определение класса

В C++ класс - это абстрактный тип данных, в котором объединяются все свойства объектов. Так же, как и в других языках программирования, формат описания класса имеет вид:

Пример 1

Сlass имя_класса

{

[private:]

//описание скрытых компонентов класса

[protected:]

//описание защищенных компонентов класса

public:

//описание доступных компонентов класса

};

В качестве компонентов класса фигурируют поля. Внутренние компоненты класса (private) доступны только компонентам функций того же класса и функциям, объявленным «дружественными» описываемому классу.

Компоненты класса, объявленные как защищенные (protected), называются защищенными. Они доступны функциям не только данного класса, но и его потомкам. При отсутствии наследования интерпретируются как внутренние.

Компоненты, объявленные в public называются общими. Они доступны за пределами данного класса в любом месте программы. Именно в этой секции осуществляются объявления полей и методов интерфейсной части класса. Если при описании секции класса тип доступа к компонент не указан, то по умолчанию присваивается тип private. Поля класса всегда описываются внутри класса. Методы могут быть описаны как внутри определения класса, так и вне него. В последнем случае определение класса должно содержать прототип этих функций. А заголовки функций должны содержать описатель видимости “::” (::private). Таким образом компилятору сообщается, что определенные функции доступны внутри поля класса.

Формат описания функций:

<тип функции> <имя класса>::<имя функции>(параметры)

{

<тело функции>

}

По правилам C++, если тело компонентной функции размещено в описании класса, то она по умолчанию считается встраиваемой функцией (inline). Для таких функций компилятор помещает машинные коды, реализующие эту функцию, непосредственно вместо вызова, что значительно ускоряет работу. Встраиваемые компилятором функции можно описать и вне определения класса, добавив к заголовку функции служебное слово (спецификатор функции) inline. При определении компонентов функции следует иметь в виду, что внутри класса запрещено определять следующие типы функций:

· рекурсивные функции;

· виртуальные функции.

Тела таких функций размещаются вне пределов класса.

Пример 2

Пример класса, моделирующего персонажа компьютерной игры:

Class monstr

{

int health, ammo;

public:

monstr(int he = 100, int am = 10)

{

health = he;

ammo = am; 

}

void draw(int x, int y, int sale, int position);

int get_health() {return health;}

int get_ammo() {return ammo;}

};

Определение класса может размещаться перед текстом программы, а может помещаться в отдельный файл, который подключается к программе при описании объектов этого класса с помощью директивы компилятора #include. Если файл находится в каталогах автоматического поиска, то #include<имя файла>.


 


Глава 3. Классы

Описание объектов

В программе, использующей определенные ранее классы, по мере необходимости объявляются объекты классов. Такое объявления выглядит следующим образом:

<имя класса> <список объектов или указателей>

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

<имя объекта>.<имя класса>::<имя поля или функции>

Чаще доступ к компонентам объекта обеспечивается с помощью укороченного имени, в котором имя класса и двоеточие опускаются. В этом случае доступ к полям и методам осуществляется по аналогии с обращением к полям структур:

<имя объекта>.<имя поля или функции>

<имя указателя на объект> -> <имя поля или функции>

<имя объекта>[индекс].<имя поля или функции>

Пример 1

Примеры объявления объектов класса:

monstr Vasia; /* Объект класса monstr с параметрами по умолчанию */

monstr Super(200, 300); /* Объект с явной инициализацией */

monstr stado[100]; /* Массив объектов класса monstr с параметрами по умолчанию */

monstr *beavis = new monstr(10); /* Динамический объект, второй параметр по умолчанию */

monstr &butthead = Vasia; /* Ссылка на объект */

 

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

· Глобальные и локальные статические объекты создаются до вызова функции main и уничтожаются по завершении работы программы.

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

· Объекты, память под которые выделяется динамически создаются функцией new и уничтожаются функцией delete.


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: