Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ / Урок 21 Классы в С.doc
Скачиваний:
47
Добавлен:
27.05.2015
Размер:
50.69 Кб
Скачать

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

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