Перегрузка методов класса в C++ | Разработка игровых платформ
  1. Доброго времени суток. В связи с появлением спамеров, активация функций новых пользователей (Создавать темы, писать сообщения), теперь будет только после проверки администратором! Для регистрации отписываемся в лс, в вк. vk.com/tehnik777 (Пишем только с реальных страниц)
    Скрыть объявление

Перегрузка методов класса в C++

Тема в разделе "С++/С#, HTML, PHP, JavaScript, XML...", создана пользователем Zloy_Enot, 6 ноя 2016.

Обсуждение темы Перегрузка методов класса в C++ в разделе С++/С#, HTML, PHP, JavaScript, XML... на форуме zetta-forum.ru.

  1. Zloy_Enot

    Zloy_Enot Модератор

    Регистрация:
    31 окт 2016
    Сообщения:
    26
    Симпатии:
    13
    Баллы:
    3
    Пол:
    Мужской
    Адрес:
    Калининград
    Методы класса можно перегружать также, как и обычные функции. Особенно это удобно, когда нужно сделать несколько конструкторов, которые будут принимать разные параметры.

    Например, попробуем создать основу класса decimal, который реализует длинную арифметику для чисел произвольной точности. В таких случаях, обычно хранят число внутри строки, а логика математических операций реализуется через написание соответствующих операторов класса.

    Сделаем так, чтобы в конструктор этого класса можно было передавать и строку и число типа double.


    Код:
    // Передача в конструктор строки
    decimal num1("10000000.999999");
    // Передача числа
    decimal num2(10000.0);
    

    Для того, чтобы класс поддерживал такую универсальность, мы сделаем два разных конструктора для строки и числа:


    Код:
    /**
     * Представим, что этот класс реализует длинную арифметику для чисел любой
     * точности
    */
    class decimal
    {
    public:
        /*
         * Конструктор, принимающий в качестве аргумента строку, содержащую число
        */
        decimal(string number)
        {
            clog << "First constructor called\n";
        }
    
        /**
         * Конструктор принимат число типа double
        */
        decimal(double number)
        {
            clog << "Second constructor called\n";
        }
    
    private:
        string number;
    };
    

    При передаче строки будет вызван первый конструктор, а при передаче числа — второй.

    Полный текст программы:


    Код:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    /**
     * Представим, что этот класс реализует длинную арифметику для чисел любой точности
    */
    class decimal
    {
    public:
        /*
         * Конструктор, принимающий в качестве аргумента строку,
         * содержащее число
        */
        decimal(string number)
        {
            clog << "First constructor called\n";
            this->number = number;
        }
    
        /**
         * Конструктор принимает число типа double
        */
        decimal(double number)
        {
            /**
             * преобразуем double в строку с максимально возможной точностью
             * и записываем полученное значение в this->number
            */
            clog << "Second constructor called\n";
        }
    
    private:
        string number;
    };
    
    int main()
    {
        // Будет вызван первый конструктор
        decimal num1("10000000.999999");
        // Будет вызван второй конструктор
        decimal num2(10000.0);
        cin.get();
        return 0;
    }
    

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

    Попробуйте написать класс student, в конструктор которого можно будет передавать либо его имя и фамилию, либо имя и год рождения. При передаче года рождения, должен считаться примерный возраст студента. Пример использования класса:


    Код:
    student stud1("Иван", "Иванов");
    student stud2("Иван", 1990);
    
     

Поделиться этой страницей