Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_на_C_plus__plus.doc
Скачиваний:
0
Добавлен:
02.12.2019
Размер:
185.86 Кб
Скачать

Программирование на C++

Понятие класса

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

Описание класса можно привести, например, в виде:

// Класс dataset

class NameDataSet

{

public:

char firstName[128];

char lastName [128];

int creditCard;

};

// экземпляр класса dataset

NameDataSet nds;

Объявление класса начинается с ключевого слова class, после которого идет имя класса и пара фигурных скобок, открывающих и закрывающих тело класса.

После ключевого слова public идет описание полей класса. Как видно из листинга, класс NaneDaraSet содержит поля имени, фамилии и номера кредитной карты. Первые два поля являются символьными массивами, а третье имеет тип int (будем считать, что это и есть номер кредитной карты).

Вообще, в классе могут быть описаны любые объекты, включая другие классы.

Обратиться к членам класса можно так:

NameDataSet nds;

nds.creditCard = 10;

cin >> nds.firstName;

cin >> nds.lastNairve;

Здесь nds — экземпляр класса NameDataSet (или отдельный объект типа NameDataSet); целочисленная переменная nds.creditCard— свойство объекта nds; член nds.crecitCard имеет тип int, тогда как другой член этого объекта, nds.firstName, имеет тип char. Видно, что обращение к элементам класса производится так же, как и обращение к элементам структуры или объединения.

Приведенный пример можно объяснить так: в этом фрагменте программы происходит объявление объекта nds, который затем будет использован для описания покупателя. Программа присваивает этому человеку кредитный номер 10. Затем программа считывает имя и фамилию со стандартного устройства ввода.

В этом примере используется потоковая операция >>, где в качестве источника данных используется стандартное устройство ввода cin (обычно это клавиатура). Возможна также потоковая операция вывода <<, где в качестве получателя можно использовать стандартное устройство вывода cout (обычно это экран дисплея).

Формы описания полей класса

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

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

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

protected – член класса, доступный только для членов этого класса и его подклассов. Защищенные члены класса не являются общедоступными.

friend – функция или класс, которые не являются членом данного класса, однако имеют доступ к защищенным членам класса.

Основные свойства классов и их элементов

1. Инкапсуляция – это объединение данных и обрабатывающих их функций (методов) в одном классе как типе объектов. Методы могут быть определены внутри класса. Такая форма описания делает метод встроенным по умолчанию. Второй метод описания заключается в том, что внутри класса описывается прототип, а описание метода размещается вне тела класса. Пример класса суммы чисел:

class Sum

{

int x,y,s;

public:

void getx(int x1) { x=x1; } // описание метода

void gety(int y1) { y=y1; } // описание метода

void summa(); // прототип метода

};

// описание метода

void Sum::summa()

{

s=x+y;

cout<<”\nСумма “<<x<<” и ”<<y<<” равна: ”<<s;

}

Под переменные x, y, s при описании каждого объекта класса Sum отводится динамическая память. То есть, эти компоненты в каждом из объектов будут располагаться в разных ячейках памяти. Можно описать также статические объекты, которые будут доступны во всех объектах данного класса. В этом случае память под данный объект не выделяется, и память под такие объекты надо выделять вручную. Например, пусть в классе Student мы описали объект

static int noOfStudents;

Мы должны сами выделить для нее место, например, с помощью оператора

int Student::noOfStudents=0;

Статическими могут быть объявлены и функции. Понятно, что они не могут прямо обращаться к компонентам этого класса, так как эти компоненты принадлежат конкретным объектам данного класса.

2. Наследование – это способность классов C++ перенимать свойства уже существующих классов. То есть, если при определении класса он включает в себя другой класс, то мы получаем доступ к объектам и этого класса.

3. Полиморфизм – это способность решать, какая из перегруженных функций-членов должна быть вызвана в зависимости от текущего типа времени исполнения объекта.