Тема: создание нового класса.
Теоретическая часть

Под классом в С++ понимают тип, определенный программистом; этот термин применим ко всему, что создано с использованием ключевого слова 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
#include
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
#include
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.
Класс может содержать несколько данных-членов, но и тогда каждый объект этого класса после объявления будет иметь свою область памяти для размещения этих данных.

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

Случайные файлы

Файл
info.txt
A&Z.txt
questions.txt
01.txt
от автора.txt




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.