Федеральное агентство по образованию

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра автоматизированных систем управления (АСУ)

Высокоуровневые методы информатики и програмирования

Лабораторная работа № 1

Студент

Специальности 80801

« 23 » апреля 2009 г.

«___» __________ 200_ г.

2009

Тема : Классы. Открытые и закрытые уровни доступа. Конструкторы. Инициализация данных объекта. Определение методов. Создание обекта в памяти.Стандартные потоки ввода-вывода.

Классы

Классы в С++ - это структуры, в которых вместе с данными определяются функции. Класс (class) - это тип, определяемый пользователем, включающий в себя данные и функции, называемые методами или функциями-членами класса.

Данные класса - это то, что класс знает.

Функции-члены (методы) класса - это то, что класс делает.

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

2.2 Обьявление класса

Приведем пример объявления класса.

class TCounter {

long count; // данные класса

public:

long GetValue(); //функции-члены класса

void SetValue(long);

};

Определение класса начинается с ключевого слова class за которым следует имя класса. Имя может иметь до 32 символов, причем различаются строчные и прописные буквы. Открывающая и закрывающая фигурные скобки определяют тело класса, в которое включено описание данных и функций класса. Заканчивается описание класса символом ;. Класс имеет столько переменных (данных), сколько необходимо. Переменные могут быть любого типа, включая другие классы, указатели на классы и указатели на динамически распределяемые объекты. Переменные объявленные внутри класса имеют область видимости класса, т.е. от точки объявления переменной до конца класса.

Открытые и закрытые уровни доступа

Для ограничения уровня доступа к данным и функциям-членам класса в С++ существуют три ключевых слова private: (частный), protected: (защищенный), public: (общедоступный), задающие разделы поступа в классе. Каждый раздел в классе начинается с одного из приведенных слов. Если ни одно из ключевых слов не использовалось, то все объявления в классе считаются частными. Разделы с разными привилегиями доступа могут появлятся в любом порядке и в любом колличестве. Рассмотрим пример.

class Example {

int x1; // частные по умолчанию

int f1(void);

protected:

int x2; // защищенные

int f2(void);

private:

int x3; // опять частные

int f3(void);

public:

int x4; // общедоступные

inf f4(void);

};

Частные члены класса имеют наиболее ограниченный доступ. К частным членам класса имеют доступ только функции-члены данного класса или классы и функции объявленные как дружественные (friend) к данному классу, например:

class TPrivateClass {

int value;

int GetValue(void);

};

int TPrivateClass::GetValue(void) {

return value; //доступ разрешен

}

void main(void) {

TPrivateClass cl; //создание объекта

int i = cl.value; //ошибка! Нет доступа

i = cl.GetValue();//ошибка! Нет доступа

}

Защищенные члены класса

Члены и функции объявленные в защищенном (protected) разделе класса доступны только для функций производных классов. Обычно в этом возникает необходимость тогда, когда разрабатываемый класс является базовым классом для других классов. В этом случае он ограничивает доступ к данным внешним пользователям и разрешает доступ для классов наследников. Рассмотрим пример иерархии объектов.

class A {

protected:

int val;

};

class B: public A { //наследуется от A

public:

void fb();

};

void B::fb() { val = 0; } //доступ разрешен

class C:public B { //наследуется от B

public:

void fc();

};

void C::fc() {val = 10;} //доступ разрешен

В данном примере приведена иерархия классов A->B->C. Свойство защищенности распространяется вниз по иерархии до тех пор пока производный класс объявляет свой базовый общедоступным (public). При этом любые функции-члены в классах C и B имеют доступ к члену данных val базового класса. Если функция-член производного класса в качестве входного параметра имеет указатель или ссылку на объект базового класса, то правила становятся другими. Модифицируем класс C следующим образом.

class C:public B {

public:

void fc(A&); //Входной параметр ссылка на базовый класс

};

void C::fc(A& a) {

val = 10; //доступ разрешен

a.val = 10; //ошибка! нарушение прав доступа

}

Общедоступные члены класса

C общедоступными членами класса все обстоит намного проще. Доступ к общедоступным членам класса разрешен функциям-членам самого класса, производных классов и обычным пользователям класса.

Конструкторы. Инициализация данных объекта.

Как и любая переменная программы, объект должен быть размещен в памяти (создан) и удален из памяти (уничтожен). Причем создание и уничтожение объектов выполняется статически или динамически.

Статическое создание объектов выполняется в процессе компиляции программы, а статическое уничтожение − при завершении программы: объект удаляется из памяти вместе с программой.

Динамическое создание и уничтожение объектов выполняется в процессе работы программы специальными командами.

Операция создания и инициализации полей объекта получила название конструирования объекта, а операция уничтожения объекта − деструкции объекта. Соответствующие методы, если они определены в классе, получили название конструкторов и деструкторов.

В языке С++ конструктор имеет тоже самое имя, что и имя класса и не может иметь какой-либо определенный возвращаемый тип, поскольку имеет заранее определенный возвращаемый тип - указатель на инициализируемый объект.

Следует отметить, что функция конструктора запускается на этапе описания (декларирования) объекта. Т.е. декларирование объекта MyObject класса CMyObject следующей строкой

CMyObject MyObject;

В языке С++ Деструктор имеет тоже имя, что и имя класса с предшествующей ему тильдой. Деструктор не имеет никакого возвращаемого типа.

Соседние файлы в папке LB1