
Определение методов класса вне класса
В предыдущем классе 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 <iostream.h>
#include <string.h>
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 <iostream.h>
#include <string.h>
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(); }