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

1 ... 40 41 42 [ 43 ] 44 45 46 ... 265


при определении методов класса используется имя класса, за которым следуют два двоеточия и имя функции (строка 18). Благодаря этому-синтаксису компилятор узнает, что определяемая здесь функция GetAgeO - это функция, объявленная в классе Cat. За исключением строки заголовка, GetAge () создается точно так же, как и другие функции.

Определение функции GetAgeO занимает только одну строку, в которой указывается, что эта функция возвращает значение переменной-члена itsAge. Обратите внимание, что функция main() не может получить доступ к этой переменной, поскольку она объявлена в закрытом разделе класса Cat. При этом из функции та1п()можно обратиться к открытому методу GetAgeO. А поскольку метод GetAgeO является функцией-членом класса Cat, то он имеет все права доступа к переменной-члену itsAge. В результате функция GetAgeO возвращает значение переменной itsAge в функцию mainO.

в строке 26 начинается определение функции-члена SetAgeO. Она принимает целочисленный параметр и присваивает переменной itsAge значение этого параметра (строка 30). Являясь членом класса Cat, функция SetAgeO имеет прямой доступ к переменной-члену itsAge.

в строке 37 начинается определение метода Meow() класса Cat. Этот метод занимает всего одну строку, в которой выводится на экран слово Meow, а затем выполняется переход на новую строку. Помните, что для перехода на новую строку используется символ \п.

в строке 44 начинается тело функции main(); она не принимает никаких аргументов. В строке 46 в функции main() объявляется объект класса Cat с именем Frisky. В строке 47 переменной-члену itsAge присваивается значение 5 с помощью метода доступа SetAgeO. Обратите внимание, что в вызове этого метода указывается имя объекта (Frisky), за которым следует оператор прямого доступа (.), и имя самого метода (SetAgeO). Таким способом можно вызывать любые другие методы класса.

В строке 48 вызывается функция-член Meow(), а в строке 49 на экран выводится значение переменной-члена с использованием функции доступа GetAgeO. В строке 51 функция Meow() вызывается снова.

Конструкторы и уеструкторы

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

int Weight; определяем переменную

здесь следуют другие выражения Weight =7; присваиваем значение переменной

Можно также определить переменную и немедленно ее инициализировать, например:

int Weight = 7; определяем и инициализируем значением rjtsk.

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



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

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

CatO;

КАнсшрдкторы н деструкторы, задонныв но дмодчанн

Если вы не объявите конструктор или деструктор, то компилятор сделает это за вас. Стандартные конструктор и деструктор не принимают аргументов и не выполняют никаких действий.

Вооросы о оо1аоп1Ы

Конструктор называется стандартным из-за отсутствия аргументов или из-за того, что создается компилятором в том случае, если в классе не объявляется никакой другой конструктор?

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

Однако что касается деструкторов, то тут есть свои отличия. Стандартный деструктор предоставляется компилятором. Поскольку все деструкторы не имеют парамефов, то главной отличительной чертой стандартного деструктора является то, что он не выполняет никаких действий, т.е. имеет пустое тело функции.

Использовапне квпструктвра, зауонного по дмолчонню

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

Cat Rags; Rags не получает никаких параметров необходимо иметь следующий конструктор:

CatO;

Конструктор вызывается при определении объекта класса. Если для создания объекта класса Cat следует передать два парамефа, то конструктор класса Cat определяется следующим образом:

Cat Frisky (5,7);



Если конструктор принимает один параметр, определение объекта будет иметь следующий вид:

Cat Frisky (3);

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

Cat Frisky;

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

Cat Frisky;

Эта запи1:ь интерпретируется как обращение к стандартному конструктору. В ней отсутствует передача параметров и, как следствие, круглые скобки.

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

Чтобы придать законченность своему труду, при объявлении конструктора не забудьте объявить и деструктор, даже если вашему деструктору нечего делать. И хотя справедливо то, что и стандартный конструктор будет корректно работать, отнюдь не повредит объявить собственный деструктор. Это сделает вашу программу более ясной.

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

Яосицш В.4. Исшьзшш ивисирщчри ц цсирщчрн

1: Пример объявления конструктора и деструктора в классе Cat

5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

#include <iostream.h> для объекта cout

class Cat начало объявления класса

public: начало открытого раздела

Cat(int initialAge); конструктор

CatO; деструктор

int GetAgeO; метод доступа

void SetAge(int age); метод доступа void MeowO;

private: начало закрытого раздела

int itsAge; переменная-член

конструктор класса Cat Cat:;Cat(int initialAge)



1 ... 40 41 42 [ 43 ] 44 45 46 ... 265

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