Перегрузка функций это использование одинаковых имен функций но отличающихся по составу или типам аргументов, таким образом компилятор понимает какую функцию использовать исходя из аргументов функции. В приведенном ниже примере перегружена функция add() для аргументов типа int и std::string.
#include <iostream> // std::cout, std::string
int add(int a, int b){ // Функция сложения целых чисел
return a + b;
}
std::string add(std::string a, std::string b){ // Функция сложения строк
return a + b;
}
int main(){
std::cout << add(5, 3) << '\n'; // 8 add() для целых чисел
std::cout << add("hi ", "Victor") << '\n'; // hi Victor add() для строк
}
Следует учитывать что хороший стиль программирования это использование для перегрузки функций похожие действия с аргументами. То есть, если вы перегружаете функцию сложения, с названием add(), то она не должна умножать или делать делить аргументы.
Перегрузка операторов это назначение для объектов класса на операторы, например +, -, *, /, %, =, [] и т.д. определенных функций. Например в примере ниже мы перегружаем для объектов класса Vector оператор индексации [], после чего мы можем обращаться к объектам класса object через индекс index, object[index].
#include <iostream> // std::cout
class Vector{ // Класс Vector
int size; // Размер
int *data; // Данные
public:
Vector(int s):size(s), data(new int[s]){} // Конструктор. Заводим массив на s элементов.
int& operator [](int index){ // Перегрузка оператора [] для обращения "как к массиву". int& className::operator [](int index){ должно быть в классе
return data[index];
}
};
int main(){
int size = 3; // Размер массива класса Vector
Vector vec(size); // Конструктор объекта vec класса Vector на size элементов
vec[0] = 7; // Присваиваем значение
vec[1] = 5; // Присваиваем значение
vec[2] = 3; // Присваиваем значение
for(int i = 0; i < size; i++){ // Выводим значения
std::cout << "vec[" << i << "] = " << vec[i] << "; "; // vec[0] = 7; vec[1] = 5; vec[2] = 3;
}
}
Хороший стиль программирования это использование для перегрузки операторов действия с объектами подобные действию встроенных в язык С++ операторов. То есть перегрузка оператора + должна делать сложение, а не какие либо другие действия.