Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АМП S.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
107.91 Кб
Скачать

46 Вопрос:

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

Как вы уже знаете из урока 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. Когда вы введете оклад, программа отобразит информацию об обоих служащих.

47 вопрос: перегрузка функций в с++

Урок 13. Перегрузка функций

При определении функций в своих программах вы должны указать тип возвращаемого функцией значения, а также количество параметров и тип каждого из них. В прошлом (если вы программировали на языке С), когда у вас была функция с именем add_values, которая работала с двумя целыми значениями, а вы хотели бы использовать подобную функцию для сложения трех целых значений, вам следовало создать функцию с другим именем. Например, вы могли бы использовать add_two_values и add_three_values. Аналогично если вы хотели использовать подобную функцию для сложения значений типа float, то вам была бы необходима еще одна функция с еще одним именем. Чтобы избежать дублирования функции, C++ позволяет вам определять несколько функций с одним и тем же именем. В процессе компиляции C++ принимает во внимание количество аргументов, используемых каждой функцией, и затем вызывает именно требуемую функцию. Предоставление компилятору выбора среди нескольких функций называется перегрузкой. В этом уроке вы научитесь использовать перегруженные функции. К концу данного урока вы освоите следующие основные концепции:

• Перегрузка функций позволяет вам использовать одно и то же имя для нескольких функций с разными типами параметров.

• Для перегрузки функций просто определите две функции с одним и тем же именем и типом возвращаемого значения, которые отличаются количеством параметров или их типом.

Перегрузка функций является особенностью языка C++, которой нет в языке С. Как вы увидите, перегрузка функций достаточно удобна и может улучшить удобочитаемость ваших программ.