Освой самостоятельно С++ за 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: //
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;
Конструкторы и деструкторы, заданные по умолчанию