Программирование >>  Программирование на языке c++ 

1 ... 22 23 24 [ 25 ] 26 27 28 ... 159


структуры). Мы можем изменять атрибуты различных компонентов, заданных по умолчанию, используя ключевые слова 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;



1 ... 22 23 24 [ 25 ] 26 27 28 ... 159

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