Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программ на С++.doc
Скачиваний:
15
Добавлен:
29.09.2019
Размер:
1.59 Mб
Скачать

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

В предыдущем классе 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();  }