102 lines
4.4 KiB
Markdown
102 lines
4.4 KiB
Markdown
---
|
||
title: C++ Overloading
|
||
localeTitle: Перегрузка C ++
|
||
---
|
||
C ++ позволяет указать более одного определения для имени функции или оператора в той же области, которая называется перегрузкой функций и перегрузкой оператора соответственно.
|
||
|
||
Перегруженное объявление представляет собой объявление, объявленное с тем же именем, что и ранее объявленное объявление в той же области видимости, за исключением того, что обе декларации имеют разные аргументы и, очевидно, другое определение (реализация).
|
||
|
||
Когда вы вызываете перегруженную функцию или оператор, компилятор определяет наиболее подходящее определение для использования, сравнивая типы аргументов, которые вы использовали для вызова функции или оператора, с типами параметров, указанными в определениях. Процесс выбора наиболее подходящей перегруженной функции или оператора называется разрешением перегрузки.
|
||
|
||
### Перегрузка функций в C ++
|
||
|
||
Вы можете иметь несколько определений для одного и того же имени функции в той же области. Определение функции должно отличаться друг от друга по типам и / или количеству аргументов в списке аргументов. Вы не можете перегружать объявления функций, которые отличаются только возвращаемым типом.
|
||
|
||
Ниже приведен пример, когда одна и та же функция print () используется для печати разных типов данных -
|
||
|
||
```cpp
|
||
#include <iostream>
|
||
#include <string>
|
||
using namespace std;
|
||
|
||
class printData {
|
||
public:
|
||
void print(int i) {
|
||
cout << "Printing int: " << i << endl;
|
||
}
|
||
void print(double f) {
|
||
cout << "Printing float: " << f << endl;
|
||
}
|
||
void print(const string& s) {
|
||
cout << "Printing string: " << s << endl;
|
||
}
|
||
};
|
||
|
||
int main() {
|
||
printData pd;
|
||
|
||
// Call print to print integer
|
||
pd.print(5);
|
||
|
||
// Call print to print float
|
||
pd.print(500.263);
|
||
|
||
// Call print to print string
|
||
pd.print("Hello C++");
|
||
|
||
return 0;
|
||
}
|
||
```
|
||
|
||
Когда приведенный выше код компилируется и выполняется, он производит следующий результат:
|
||
```
|
||
Printing int: 5
|
||
Printing float: 500.263
|
||
Printing string: Hello C++
|
||
```
|
||
|
||
### Перегрузка оператора в C ++
|
||
|
||
Большинство встроенных операторов также могут быть перегружены на C ++. Это позволяет программистам назначать различную реализацию операторам в зависимости от аргументов. Эти перегруженные операторы могут работать для определенного пользователем класса.
|
||
```
|
||
#include<iostream>
|
||
using namespace std;
|
||
|
||
class Complex_Number{
|
||
private:
|
||
int real;
|
||
int imag;
|
||
public:
|
||
Complex_Number(int i = 0, int j =0)
|
||
{
|
||
real = i;
|
||
imag = j;
|
||
}
|
||
//Here the operator '+' is being overloaded
|
||
Complex_Number operator + (Complex_Number const &a)
|
||
{
|
||
Complex_Number x;
|
||
x.real = real + a.real;
|
||
x.imag = imag + a.imag;
|
||
return x;
|
||
}
|
||
void print()
|
||
{
|
||
cout<<real<<" + i"<<imag<<endl;
|
||
}
|
||
};
|
||
|
||
int main()
|
||
{
|
||
Complex_Number c1(3, 2), c2(1, 1);
|
||
//Here, the overloaded operator is called. The numbers get added according to the function defined
|
||
Complex_Number c3 = c1 + c2;
|
||
c3.print();
|
||
}
|
||
```
|
||
|
||
Выход для вышеуказанной программы
|
||
```
|
||
4 + i3
|
||
|
||
``` |