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 
 | ||
| 
 | ||
| ``` |