|
Программирование >> Программирование на языке c++
структуры). Мы можем изменять атрибуты различных компонентов, заданных по умолчанию, используя ключевые слова private, public и protected (последний атрибут будет рассмотрен позже). Класс или структура может содержать любое число секций с заданными атрибутами. Секция начинается с ключевого слова (private, public или protected) и двоеточия после него. Секция заканчивается в конце описания структуры (класса) или началом другой секции, например: { ..................... private: секция private public: секция public private: секция private protected: секция protected конец секции protected Рассмотрим пример. #include <iostream.h> #include <string.h> здесь описана библиотечная функция strcpy class string { char str[25]; public: void set st ring (char*); void display string(void); char* return string(void); void string :: set st ring (char *s) { strcpy(str,s); } копирование s в str void string :: display string(void) { cout str endl; } char* string :: return string(void) { return str; } void main (void) { string str1; объявление объекта str1 str1.set string{ University of Aveiro ); str1.display string(); cout str1.return string() endl; Здесь определен класс string, имеющий три компонента-функции и один компонент-данное. Единственное данное str имеет атрибут private (заданный по умолчанию). Все функции в классе имеют атрибут public (заданный явно с помощью соответствующего ключевого слова). В классе приведены лишь объявления функций, а их описания вынесены за пределы класса и представлены в виде тип возвра1цаемого значения имя класса :: описание функции Оператор принадлежности :: используется для того, чтобы определить класс, для которого описывается функция (разные функции в разных классах могут иметь одинаковые имена). Строка string str1; объявляет объект класса string с именем strl. Строка str1.set string( University of Aveiro ); вызывает компонент-функцию объекта strl с именем set string. Этой функции передается один параметр - указатель на строку University of Aveiro. Значение этого указателя назначается локальной переменной s (см. описание функции set string). Далее библиотечная функция strcpy копирует строку, на которую указывает s, в локальный символьный массив объекта str. В результате str будет указывать на строку University of Aveiro. Вызов компонента-функции display string позволяет вывести текст University of Aveiro на экран дисплея. Строка cout << str1.return string() endl; тоже выводит указанный выше текст на экран дисплея. Манипулятор endl переводит курсор на экране дисплея в начало следующей строки. Имена с атрибутом private (имя str в нашем примере) могут использоваться только компонентами-функциями этого же класса (некоторые исключения из этого правила будут оговорены позже). Таким образом, если мы запишем непосредственно в функции main строку strcpy (stri ,str, University of Aveiro );, то компилятор обнаружит ошибку, так как доступ из-за пределов объекта stri к его локальной переменной str закрыт. 3.2. Указатель this Если некоторая функция ( например, set string) является компонентом объекта (например, string), то можно обращаться к компонентам объекта непосредственно по имени, т. е. без указания дополнительно имени объекта. Рассмотрим следующие объявления: string str1; string str2; и вызовы компонентов-функций: s.tr1.display string{); str2.display string{); В обеих функциях будет выполнена инструкция: cout str endl; Возникает вопрос: откуда первая функция знает, что переменную str надо взять для объекта stri, и откуда вторая функция знает, что переменную str надо взять для объекта str2? Ответ на этот вопрос будет таким. Каждый новый объект (в нашем примере это stri и str2) имеет скрытый от пользователя указатель на этот объект (рис. 3.3). По-другому это можно объяснить так. Когда объявляется объект, под него выделяется память в компьютере. В памяти есть специальное поле, содержащее скрытый указатель, который адресует начало выделенной под объект памяти. Получить значение указателя в компонентах-функциях объекта можно с помощью ключевого слова this. Для любой функции, принадлежащей классу my class, указатель this неявно объявлен так: my class *const this;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |