Чтение онлайн

ЖАНРЫ

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

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

14: };

15:

16: // GetAge, открытая функция доступа,

17:// возвращает значение переменной-члена itsAge

18: int Cat::GetAge

19: {

20: return itsAge;

21: }

22:

23: // Определение открытой функции доступа SetAge

24: // Функция SetAge

25: // инициирует переменную-член itsAge

26: void Cat::SetAge(int age)

27: {

28: // устанавливаем переменную-член itsAge равной

29: // значению, переданному с помощью параметра age

30: itsAge = age;

31: }

32:

33: // Определение метода Meow

34: //

возвращает void

35: // параметров нет

36: // используется для вывода на экран текста "Meow"

37: void Cat::Meow

38: {

39: cout << "Meow.\n";

40: }

41:

42: // Создаем виртуальную кошку, устанавливаем ее возраст, разрешаем

43: // ей мяукнуть, сообщаем ее возраст, затем снова "мяукаем".

44: int main

45: {

46: Cat Frisky;

47: Frisky.SetAge(5);

48: Frisky.Meow;

49: cout << "Frisky is а cat who is ";

50: cout << Frisky.QetAge << " years old.\n";

51: Frisky.Meow;

52: return 0;

53: }

Результат:

Meow.

Frisky is а cat who is 5 years old.

Meow.

Анализ: В строках 6—14 содержится определение класса Cat. Строку 8 занимает ключевое слово public, которое сообщает компилятору, что за ним следует набор открытых членов класса. В строке 9 содержится объявление открытого метода GetAge, который предоставляет доступ к закрытой переменной-члену itsAge, объявляемой в строке 13. В строке 10 объявляется открытая функция доступа SetAge, которая принимает в качестве аргумента целочисленное значение и присваивает переменной itsAge значение этого аргумента.

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

В строке 12 начинается закрытый раздел, который включает только одно объявление закрытой переменной-члена itsAge (строка 13). Объявление класса завершается закрывающей фигурной скобкой и точкой с запятой в строке 14.

Строки 18—21 содержат определение функции-члена GetAge. Этот метод не принимает никаких параметров и возвращает целое значение. Обратите внимание на то, что

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

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

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

В строке 37 начинается определение метода Meow класса Cat. Этот метод занимает всего

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

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

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

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

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

int Weight;

// определяем переменную

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

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

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

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

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

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

~Cat;

Конструкторы и деструкторы, заданные по умолчанию

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

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

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

Поделиться с друзьями: