Учимся программировать на языке C++


Перегрузка конструкторов


Как вы уже знаете из урока 13, C++ позволяет вашим программам перегружать определения функций, указывая альтернативные функции для других типов параметров. C++ позволяет вам также перегружать конструкторы. Следующая программа CONSOVER.CPP перегружает конструктор 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;

}

Ниже приведена реализация программы CONSOVER.CPP:

#include iostream.h

#include string.h

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;

};

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;

}

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);

}

void employee::show_employee(void)

{

cout "Служащий: " name endl;

cout "Номер служащего: " employee_id endl;

cout "Оклад: " salary endl;

}

void main(void)

{

employee worker("Happy Jamsa", 101, 10101.0);

employee manager("Jane Doe", 102);

worker.show_employee();

manager.sbow_employee();

}

Если вы откомпилируете и запустите эту программу, на вашем экране появится запрос ввести оклад для Jane Doe. Когда вы введете оклад, программа отобразит информацию об обоих служащих.


Содержание раздела