Методы класса можно перегружать также, как и обычные функции. Особенно это удобно, когда нужно сделать несколько конструкторов, которые будут принимать разные параметры.
Например, попробуем создать основу класса decimal , который реализует длинную арифметику для чисел произвольной точности. В таких случаях, обычно хранят число внутри строки, а логика математических операций реализуется через написание соответствующих операторов класса.
Сделаем так, чтобы в конструктор этого класса можно было передавать и строку и число типа double .
decimal num1("10000000.999999");
decimal num2(10000.0);
Для того, чтобы класс поддерживал такую универсальность, мы сделаем два разных конструктора для строки и числа:
class decimal
{
public:
decimal(string number)
{
clog << "First constructor called\n";
}
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;
}
decimal(double 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);
|