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

Использование общих и частных элементов класса

Следующая программа INFOHIDE.CPP иллюстрирует использование общих и частных элементов класса. Программа определяет объект типаemployee как показано ниже:

class employee

{  public:     int assign_values(char *, long, float);     void show_employee(void);     int change_salary(float);     long get_id(void);  private:     char name [64] ;     long employee_id;     float salary;  }

Как видите, класс защищает все свои элементы данных, объявляя их частными. Для доступа к элементам данных программа должна использовать интерфейсные функции. Ниже приведена реализация программы INFOHIDE.CPP:

#include <iostream.h>

#include <string.h>

class employee

{  public:     int assign_values(char *, long, float);     void show_employee(void);     int change_salary(float);     long get_id(void);  private:     char name [64];     long employee_id;     float salary;  );

int employee::assign_values(char *emp_name, long emp_id, float emp_salary)

{     strcpy(name, emp_name);     employee_id = emp_id;     if (emp_salary < 50000.0)

   {        salary = emp_salary;        return(0); // Успешно      }     else  return(-1); // Недопустимый оклад }

void employee::show_employee(void)

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

int employee::change_salary(float new_salary)

{     if (new_salary < 50000.0)

   {        salary = new_salary;        return(0); // Успешно } else return(-1); // Недопустимый оклад }

long employee::get_id(void)

{     return(employee_id) ;  }

void main(void)

{     employee worker;

   if (worker.assign_values("Happy Jamsa", 101, 10101.0) == 0)

   {        cout << "Служащему назначены следующие значения" << endl;}        worker.show_employee();        if (worker.change_salary(35000.00) == 0)

      {           cout << "Назначен новый оклад" << endl;           worker.show_employee();        }     }     else     cout << "Указан недопустимый оклад" << endl;  }

Выберите время, чтобы исследовать операторы программы более подробно. Несмотря на то что программа достаточно длинна, ее функции на самом деле очень просты. Метод assign_values инициализирует частные данные класса. Метод использует оператор if, чтобы убедиться, что присваивается допустимый оклад. Метод show_employee в данном случае выводит частные элементы данных. Методы change_salary и get_id представляют собой интерфейсные функции, обеспечивающие программе доступ к частным данным. После успешной компиляции и запуска этой программы отредактируйте ее и попытайтесь обратиться напрямую к частным элементам данных, используя оператор точку внутри main. Так как вы не можете напрямую обратиться к частным элементам, компилятор сообщит о синтаксических ошибках.

Что такое интерфейсные функции

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