Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
27.02.2014
Размер:
6.5 Кб
Скачать
                                 Тема: создание нового класса.
                                       Теоретическая часть

	Под классом в С++ понимают тип, определенный программистом; этот термин применим ко всему, что создано с использованием ключевого слова class, а также структурам и объединениям.
Определение класса выглядит следующим образом:
class:<имя класса>
{
private:<объявление>
public:<объявление>
protected:<объявление>
};

	В конце объявления класса, как и в конце объявления переменных, обязательно наличие точки с запятой.
	Объявления могут включать как объявление функций, так и объявление данных, которые называются функциями-членами и данными-членами. Данные-члены определяют свойства класса - его длину, адрес, форму; Функции-члены определяют его поведение: действия, которые он может выполнять. Помимо обячных объявлений в определении класса содержатся ключевые слова, задающе область действия (видимости) членов класса:
private (закрытый) - члены класса, объявленные после этого ключевого слова, определены только внутри класса и вне его использоваться не могут.
public (открытый) - члены класса, объявленные после этого ключевого слова, определены как внутри класса, так и вне его(при указании имени класса).
protected (защищенный) - члены класса, объявленные после этого ключевого слова, определены для членов класса, его потомков и друзей.
	Ключевые слова private, public и protected иногда называют атрибутами доступа к членам класса. При отсутствии явного указания в области видимости для каких-либо членов класса, они определяются как закрытые и не доступны вне определения класса.
	Примером класса может быть графическая точка на экране монитора. ее данными-членами являются координаты x,y, а также цвет. В качестве функций членов можно задать инициализацию точки, определение ее цвета, установку нового цвета.
class GraphPaint
{
private:
             int x,y, color;
public:
   void init (int Wx, int Wy, int Wcolor);
   void setnewcolor (int Wcolor);
}
;

class MyStr
	Определим еще один класс, являющийся расширением старого типа С++.

class MyStr
{
char String [256];
public: 
   char*getpnt (void);
   int length (void);
   void copy (char * s);
   void plus (char * s);
}
;

	В качестве данных-членов в этом классе имеется единственная переменная string, по умолчанию определенная как private, а в качестве функций-членов 4 функции, определенные как public.

		Поведение класса
	Определение функции членов класса практически не отличается от определения обычных функций, за исключением того, что перед ними должно стоять имя класса и 2 двоеточия. Выглядит это так:
<имя класса>::<имя функции>(<список параметров>){<тело функции>}.
	В определении функции отсутствуют точка с запятой после заголовка и после фигурной скобки, закрывающей тело функции.
	Имя класса является неотъемлемой частью определения функции-члена этого класса. Т.к. несколько классов могут иметь функции-члены с одним и тем же именем. Кроме того, именно функция класса определяет поведение класса, т.е. его действия.
	Определим фкункцию класса Mystr, определенного в предыдущей программе:
#include <string.h>
#include <mystr.h>
char * MyStr::getptr (void)
// Функция определяет адрес строки данных
{ 
	return String;
}
int MyStr::length (void)
// Функция определяет длину строки данных
{
	return strlen (String);
}
void MyStr::copy (char * s)
/* Функция копирует строку-параметр в область данных своего класса */
{
	strcpy (String, s);
}
void MyStr::plus (char * s)
/* Функция дописывает строку-параметр к строке, нахожящейся в области 
данных её класса */
{
	strcat (String, s);
}
;

Таким образом, объявив класс Mystr в примере 2 и определив все функции, входящие в него в примере 3, мы ввели новый класс Mystr. Если первый класс нужен только в конкретной программе и не расчитан на широкое применение, его объявление и определение его функций могут быть записаны в одном файле Mystr.cpp. Этот файл должен содержать тексты примеров 2 и 3. Но в нем находится пока только объявление нового класса и определение его функций.
	Для использования этого класса нужно еще дописать текст этого файла.
	Если предполагается использование нового класса в других программах, лучше оформить его так, как это обычно принято в С++. Для этого определение класса Mystr (весь текст примера 2) сохраняется в виде файла заголовков, например mystr.h, а описание функций-членов класса (весь пример 3), в другом файле. Например, mystr.cpp.
	При использовании объектов Mystr файлы заголовков включаются в программу с помощью директивы.
	А файл Mastr.cpp копируется в виде объектного файла, включается в проект программы и далее используется как все остальные основные классы С++.
		
		Объекты класса
	Все объявленные переменные являются объектами класса Mystr. Но от обычной переменной объект отличает то, что он может поддерживать вызов функции, членов своего класса и другие операции. Вызов функции членов класса имеет следующий синтаксис6
<объект>.<имя функции-члена>(<параметры>);

Пример:
#include <stdio.h>
#include <mystr.h>
void main ()
{
	MyStr str, str2;
	str1.copy ("Привет,");
    str2.copy ("объект!");
	str1.plus (str2.getptr());
	puts (str1.getptr());
};

	В данном примере 2 инструкции после инструкции "объявление" копируют строки "параметры" в поля данных объектов str1 и str2. Третье - дописывают к строке объекта str1 cтроку объекта str2. Четвертое - получают указатель на строку объекта str1 и выводит ее на экран. Каждый объект имеет свое собственное поле данных. Т.о., в результате работы программы, на экране монитора появится строка "Привет, объект!". за вывож на экран отвечает директива stdio.h.
	Если объекты различных классов имеют функции с одинаковыми именами, кампилятор определяет нужную функцию через класс объекта.
В примере 4 компилятор определяе типы str1 и str2 и вызывает функции mystr::copy, mystr::plus, mystr::getpnt.
	Таким образом, первые 2 выполняемые инструкции обращаются к одной и той же функции класса. Работа с функциями и данными объектов С++ реализуется по-разному: все объекты одного класса имеют общий доступ к одним и тем же функциям. Но каждый из них имеет свое поле данных, не зависимо от того, написано оно как public или private.
	Класс может содержать несколько данных-членов, но и тогда каждый объект этого класса после объявления будет иметь свою область памяти для размещения этих данных.

Задание: создать свой класс, заголовочный файл и функцию.