Класс представляет собой главное инструментальное средство C++ для объектно-ориентированного программирования. Как вы узнаете из данного урока, класс очень похож на структуру, в которой сгруппированы элементы, соответствующие данным о некотором объекте, и оперирующие этими данными функции (называемые методами). Вы узнаете, что объект представляет собой некоторую сущность, например телефон. Класс C++ позволяет вашим программам определять все атрибуты объекта. В случае, когда объектом является телефон, класс может содержать такие элементы данных, как номер и тип телефона (кнопочный или дисковый) и функции, работающие с телефоном, напримерdial, answer, иhang_up. Группируя данные об объекте и кодируя их в одной переменной, вы упрощаете процесс программирования и увеличиваете возможность повторного использования своего кода. Этот урок знакомит вас с классами C++ . К концу урока вы освоите следующие основные концепции:

  • Для определения класса программа должна указать имя класса, элементы данных класса и функции класса (методы).
  • Определение класса обеспечивает шаблон, с помощью которого ваши программы могут создать объекты типа этого класса, подобно тому, как программы создают переменные типаint, char и т. д.
  • Программа присваивает значения элементам данных класса, используя оператор точку.
  • Программа вызывает функцию-элемент класса, используя оператор точку.

ПРЕДСТАВЛЕНИЕ ОБ ОБЪЕКТАХ И ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ

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

Класс позволяет вашим программам группировать данные и функции которые выполняют операции над этими данными. Большинство книг и статей об объектно-ориентированном программировании называют функции класса методами. Подобно структуре, класс C++ должен иметь уникальное имя, за которым следует открывающая фигурная скобка, один или несколько элементов и закрывающая фигурная скобка:

class class_name

{
   int data_member; // Элемент данных
   void show_member(int); // Функция-элемент
};

После определения класса вы можете объявлять переменные типа этого класса (называемые объектами), как показано ниже:

class_name object_one, object_two, object_three;

Следующее определение создает классemployee, который содержит определения данных и метода:

class employee

{
   public:
   char name[64] ;
   long employee_id;
   float salary;
   void show_employee(void)

   {
      cout << "Имя:" << name << endl;
      cout << "Номер служащего: "<< employee_id << endl;
      cout << "Оклад:" << salary << endl;
   };
};

В данном случае класс содержит три переменные и одну функцию-элемент. Обратите внимание на использование меткиpublic внутри определения класса. Как вы узнаете из урока 22, элементы класса могут быть частными (private) или общими {public), от чего зависит, как ваши программы обращаются к элементам класса. В данном случае все элементы являются общими, это означает, что программа может обращаться к любому элементу, используя оператор точку. После определения класса внутри вашей программы вы можете объявить объекты (переменные) типа этого класса, как показано ниже:

————————————————————— Имя класса

employeeworker, boss, secretary; //--------->Переменные класса (объекты)

Следующая программа EMPCLASS.CPP создает два объекта employee. Используя оператор точку, программа присваивает значения элементам данных Затем программа использует элементshow_employee для вывода информации о служащем:

#include  

#include

class employee

{
public:
   char name [64];
   long employee_id;
   float salary;
   void show_employee(void)

   {
      cout << "Имя:" << name << endl;
      cout << "Номер служащего: "<< employee_id << endl;
      cout << "Оклад:" << salary << endl;
   };
};

void main(void)

{
   employee worker, boss;
   strcpy(worker.name, "John Doe");
   worker.employee_id = 12345;
   worker.salary = 25000;
   strcpy(boss.name, "Happy Jamsa");
   boss.employee_id = 101;
   boss.salary = 101101.00;
   worker.show_employee();
   boss.show_employee();
}

Как видите, программа объявляет два объекта типаemployee — worker и boss, а. затем использует оператор точку для присваивания значений элементам и вызова функцииshow_employee.

Представление об объектах

Большинство программ на C++ отражают реальные существующие объекты. В известном смысле объекты представляют собой сущности, например автомобиль, собаку, часы и т. д. Обычно объект имеет несколько атрибутов и операций, которые программа должна выполнять над этими атрибутами. Например, в случае часов свойства могут включать текущее время и время будильника. Операции такого объекта могли бы содержать установку времени, установку будильника или выключение будильника. При объектно-ориентированном программировании ваши программы фокусируются на объектах и операциях над этими объектами.

ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА

В предыдущем классеemployee функция была определена внутри самого класса (встроенная (inline) функция). При увеличении функций определение встроенных функций внутри класса может внести беспорядок в описание класса. В качестве альтернативы вы можете поместить прототип функции внутри класса, а затем определить функцию вне класса. Ваше определение класса с прототипом становится следующим:

class employee

{
public:
   char name[64];
   long employee_id;
   float salary;
   void show_employee(void); |————————> Прототип функции
};

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

void employee:: show_employee (void) //-------------->Имя класса

{
   сout<< "Имя:" << name << endl; Имя элемента cout << "Номер служащего:" << employee_id << endl;
   cout << "Оклад:" << salary << endl;
};

Как видите, приведенный код предваряется определением функции с именем класса(employee) и оператором глобального разрешения (::). Следующая программа CLASSFUN.CPP помещает определение функции show_employee вне класса, используя оператор глобального разрешения для указания имени класса:

#include  

#include

class employee

{
public:
   char name [64];
   long employee_id;
   float salary;
   void show_employee(void);
};

void employee::show_employee(void)
{
   cout << "Имя:" << name << endl;
   cout << "Номер служащего: "<< employee_id << endl;
   cout << "Оклад:" << salary << endl;
};

void main(void)

{
   employee worker, boss;
   strcpy(worker.name, "John Doe");
   worker.employee_id = 12345;
   worker.salary = 25000;
   strcpy(boss.name, "Happy Jamsa");
   boss.employee_id = 101;
   boss.salary = 101101.00;
   worker.show_employee();
   boss.show_employee();
}

Методы класса

Классы C++ позволяют вашим программам группировать данные объекта и функции объекта (методы), которые оперируют с этими данными, в одной переменной. У вас есть две возможности определения методов объекта. Первая состоит в том, что вы можете включить весь код функции внутрь определения класса. Несмотря на то что включение кода метода в определение класса может представляться удобным, однако, когда классы становятся сложнее и включают несколько методов, операторы функций могут вносить беспорядок в определение классов. Таким образом, многие программы определяют операторы функции вне класса. В определение класса программа должна включать прототипфункции, который указывает имя функции, тип возвращаемого значения и типы параметров.

Для определения функции вне определения класса ваша программа должна предварять определение функции именем класса и оператором глобального разрешения, как показано ниже:

return_type class_name::function_name(parameters)
{
// Операторы }

ВТОРОЙ ПРИМЕР

Следующая программа PEDIGREE.CPP создает классdog, который содержит несколько полей данных и функциюshow_breed. Программа определяет функцию класса вне определения самого класса. Затем программа создает два объекта типаdog и выводит информацию о каждой собаке:

#include  

#include

class dogs

{
public:
   char breed[64];
   int average_weight;
   int average_height;
   void show_dog(void) ;
};

void dogs::show_breed(void)

{
   cout << "Порода:" << breed << endl;
   cout << "Средний вес: "<< average_weight << endl;
   cout << "Средняя высота:" << average_height << endl;
}

void main(void)

{
   dogs happy, matt;
   strcpy(happy.breed, "Долматин") ;
   happy.average_weight = 58;
   happy.average_height = 24;
   strcpy(matt.breed, "Колли");
   matt.average_weight =22;
   matt.average_height = 15;
   happy.show_breed() ;
   matt.show_breed();
}

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Программы на C++ широко используют классы. Говоря кратко, классы позволяют вашим программам группировать для определенного объекта его данные и методы (функции), которые оперируют этими данными, в одной переменной. Как видите, классы очень похожи на структуры, которые вы рассматривали в уроке 18. Классы C++ являются основой объектно-ориентированного программирования. Следующие уроки расширяют возможности предоставляемые классами. Упоминавшаяся в этом уроке меткаpublic, появляющаяся в определении класса, делает элементы класса доступными для всей программы. Из урока 22 вы больше узнаете о частных и общих элементах класса. До изучения урока 22 убедитесь, что освоили следующие основные концепции:

    1. В известном смысле объект представляет собой сущность, с которой ваши программы выполняют разные операции.
    2. Программы на C++ представляют объекты посредством классов.
    3. Класс, подобно структуре, содержит элементы. Элементы класса могут хранить информацию (данные) или быть функциями (методами), которые оперируют этими данными.
    4. Каждый класс имеет уникальное имя.
    5. После определения класса вы можете объявлять объекты этого класса, используя имя класса в качестве типа.
    6. Для обращения к элементам класса (как к данным, так и к функциям) ваши программы используют оператор точку.
    7. Программы могут определять функцию класса внутри или вне определения класса. Если вы определяете функцию вне определения класса, вам следует указать имя класса и использовать оператор глобального разрешения, напримерclass:: function.