El estudio básico de C ++ señala cuatro: sobrecarga de la función sobrecargada

El estudio básico de C ++ señala cuatro: sobrecarga de la función sobrecargada

¿Qué es la sobrecarga de funciones?

En C ++, se permite declarar varias funciones del mismo nombre con funciones similares en el mismo ámbito. En otras palabras, use la misma función para completar diferentes funciones. La función sobrecargada es una manifestación de polimorfismo estático.

Características de sobrecarga de funciones

  1. Los parámetros formales (referidos al número, tipo u orden de los parámetros) deben ser diferentes. Los tipos de valor de retorno de función pueden ser iguales o diferentes.
  2. función de emparejamiento no distingue entre constlas referencias &, pero constcon *o &puede distinguir cuando la composición del operador compuesto de unión, el siguiente código sería de demostración.
  3. Evite la contaminación del espacio de nombres.

Principio de sobrecarga de funciones

Cuando se compila el programa, el compilador realizará el nombre original de la función 名称修饰, y el nombre modificado representa la función.

Ejemplos de uso de sobrecarga de funciones

#include<iostream>

using namespace std;

class Printer
{
	private:
		int inkVolume;
		char printerType;
	public:
		Printer():inkVolume(0),printerType('Z')
			{cout << "print by none-arg function" <<endl;}
			
		Printer(int vol):inkVolume(vol),printerType('Z')
			{cout << "print by 1-arg function" <<endl;}
			
		Printer(int vol, char type):inkVolume(vol),printerType(type)
			{cout << "print by 2-arg function" <<endl;}
			
		//void print(int value){cout << value << " print by function #1" <<endl;}//#1
		
		void print (int value) const {cout << value << " print by const function #2" <<endl;}//#2
		
		void print(int &value){cout << value  << " print by function #3" <<endl;}//#3
		
		void print(const int &value){cout << value  << " print by function #4" <<endl;}//#4
		
		void print(int &&value){cout << value  << " print by function #5" <<endl;}//#5
		
		//int print(int value){cout << value  << " print by function #6" <<endl;return 0;}//#6仅返回值不同,编译不通过
		
		//void print(const int value){cout << value  << " print by function #7" <<endl;}//#7
		
		//void print(int value, int value2 = 1){cout << value << value2  << " print by function #8" <<endl;}//#8默认参数在后 
			
		void print(float value){cout << value  << " print by function #9" <<endl;}//#9
		
		void print(char value){cout << value  << " print by function #10" <<endl;}//#10
		
		void print(char* value){cout << *value  << " print by function #11" <<endl;}//#11
		
		void print(const char* value){cout << *value  << " print by function #12" <<endl;}//#12
		
		//void print(char* const value){cout << value  << " print by function #13" <<endl;}//#13
};

int main()
{
	Printer printer1;
	Printer printer2(123);
	const Printer printer3(123,'A');
	
	int intValue = 123;
	const int c_intValue = 1234;
	float floatValue = 1.1;
	char charValue = 'A';
	char* p_charValue = new char('B');
	const char* cp_charValue = new char('C');
	
	
	//printer1.print(1);//1 是 立即数常量 可以调用#1,#4,#5 ,#2(当且仅当仅存在#2时) 
	printer3.print(1);//只调用 #2
	printer1.print(intValue);//#3 
	printer1.print(c_intValue);//#4 
	printer1.print(1+1);//#5 
	printer1.print(floatValue);//#9
	printer1.print(charValue);//#10 
	printer1.print(p_charValue);//#11
	printer1.print(cp_charValue);//#12
	
    return 0;
}
/* 运行结果为: 
print by none-arg function
print by 1-arg function
print by 2-arg function
1 print by const function #2
123 print by function #3
1234 print by function #4
2 print by function #5
1.1 print by function #9
A print by function #10
B print by function #11
C print by function #12

--------------------------------
Process exited after 0.09048 seconds with return value 0
请按任意键继续. . .
*/

Análisis de código

  1. int valueY const int valueno hay ninguna diferencia, ya que el parámetro no cambiará el argumento. No sobrecargado
  2. char *valueY const char *valuehay una diferencia, el punto anterior a una variable de cadena, lo que apunta a una constante de cadena. Se puede sobrecargar.
  3. char *valueY char const *valueno hay ninguna diferencia, el primero es una variable puntero del carácter, que es una constante puntero del carácter. Como parámetro, el valor real del parámetro no cambiará. No sobrecargado
  4. int &valueY const int &valuehay una diferencia, el primero que apunta a una variable entera, lo que apunta a una constante entera. Se puede sobrecargar.
  5. int &&value&& significa referencia de valor

Supongo que te gusta

Origin www.cnblogs.com/realZhaZhaHui/p/12757835.html
Recomendado
Clasificación