{
public:
employee(char *, long, float);
void show_employee(void);
int change_salary(float);
long get_id(void);
private:
char name [64];
long employee_id;
float salary;
};
employee::employee(char *name, long employee_id, float salary)
{
strcpy(employee::name, name);
employee::employee_id = employee_id;
if (salary < 50000.0)
employee::salary = salary;
else // Недопустимый оклад
employee::salary = 0.0;
}
void employee::show_employee(void)
{
cout << "Служащий: " << name << endl;
cout << "Номер служащего: " << employee_id << endl;
cout << "Оклад: " << salary << endl;
}
int main()
{
system("chcp 1251");
employee worker("Савин", 101, 10101.0);
worker.show_employee();
system("pause");
}
highlightSyntax('cpp_88660','cpp'); За объявлением объекта worker следуют круглые скобки и начальные значения, как и при вызове функции. Когда используется конструктор, ему передают параметры при объявлении объекта:
employee worker("Савин", 101, 1000.0);
highlightSyntax('cpp_21606','cpp'); Если потребуется создать несколько объектов employee, можно инициализировать элементы каждого из них с помощью конструктора:
| employee worker("Савин", 101, 1000.0); |
| employee secretary("Нагель", 57, 20000.0); |
| employee manager("Илюхин", 1022, 30000.0); |
Конструктор представляет собой специальную функцию, которую C++ автоматически вызывает каждый раз при создании объекта. Назначение конструктора заключается в инициализации элементов данных объекта. Конструктор имеет такое же имя, как и класс. Конструктор определяется внутри своей программы так же, как и любой метод класса. Единственное различие заключается в том, что конструктор не имеет возвращаемого значения. Когда объявляется объект, можно передавать параметры конструктору:
class_name object(valuel, value2, value3);
3.2. highlightSyntax('cpp_83137','cpp'); Параметры по умолчанию и перегрузка конструкторов.
C++ позволяет указывать значения по умолчанию для параметров функции. Если не указывать каких-либо параметров, функция будет использовать значения по умолчанию. Конструктор не является исключением, программа может указать для него значения по умолчанию так же, как и для любой другой функции. Следующий конструктор employee использует по умолчанию значение оклада равным 10000.0, если программа не указывает оклад при создании объекта. Однако программа должна указать имя служащего и его номер:
| employee::employee(char *name, long employee_id, float salary = 10000.00) |
| { |
| strcpy(employee::name, name); |
| employee::employee_id = employee_id; |
| if (salary < 50000.0) |
| employee::salary = salary; |
| else // Недопустимый оклад |
| employee::salary = 0.0; |
| } |
C++ позволяет программам перегружать определения функций, указывая альтернативные функции для других типов параметров. Также перегружаются конструкторы. Следующая программа перегружает конструктор employee. Первый конструктор требует, чтобы программа указывала имя служащего, номер служащего и оклад. Второй конструктор запрашивает ввести требуемый оклад, если программа не указывает его:
| employee::employee(char *name, long employee_id) |
| { |
| strcpy(employee::name, name); |
| employee::employee_id = employee_id; |
| do |
| { |
| cout << "Введите оклад для " << name << " меньше $50000: "; |
| cin >> employee::salary; |
| } |
| while (salary >= 50000.0); |
| } |
Внутри определения класса программа должна указать прототипы для обоих конструкторов:
| class employee |
| { |
| public: |
| employee (char *, long, float); // Прототипы перегруженных |
| employee(char *, long); //функций |
| void show_employee(void); |
| int change_salary(float); |
| long get_id(void); |
| private: |
| char name [64]; |
| long employee_id; |
| float salary; |
| } |
highlightSyntax('cpp_47024','cpp'); Реализация программы:






