2021-01-27 El séptimo día de registro y aprendizaje de C ++


Uno, referencia en C ++

1. Uso básico de referencias

Variables de alias
gramática:数据类型 &别名 = 原名

Ejemplo

#include<iostream>
using namespace std;

int main()
{
    
    
	int a = 10;
	int &b = a;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	a = 100;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	b = 200;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	
	system("pause");
	return 0;

}

Resultado de salida
Inserte la descripción de la imagen aquí

2. Precauciones para la citación

  • La referencia debe inicializarse

  • Una vez inicializada la referencia, no se puede cambiar.

Ejemplo

#include<iostream>
using namespace std;

int main()
{
    
    
	//int &a;//错误,引用必须初始化,展示是谁的别名
	int a = 10;
	int b = 20;
	int &c = a;

	//引用 在初始化后不可更改
	c = b;//这是正确的,因为这是赋值操作

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;

	system("pause");
	return 0;

}

Resultado de salida
Inserte la descripción de la imagen aquí

3. Cotización como parámetro de función

Cuando se pasan parámetros a la función, puede utilizar la técnica de referencia para hacer que los parámetros formales modifiquen los parámetros reales,
Puede simplificar el puntero para modificar el parámetro real

(Similar a la entrega de direcciones)

Ejemplo

#include<iostream>
using namespace std;

//1、值传递
void swap01(int a, int b)
{
    
    
	int temp = a;
	a = b;
	b = temp;
	cout << "swap01a = " << a << endl;
	cout << "swap01b = " << b << endl;
}

//2、地址传递
void swap02(int *a, int *b)
{
    
    
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << "swap02 a = " << *a << endl;
	cout << "swap02 b = " << *b << endl;
}

//3、引用传递
void swap03(int &a, int &b)
{
    
    
	int temp = a;
	a = b;
	b = temp;
	cout << "swap03 a = " << a << endl;
	cout << "swap03 b = " << b << endl;
}

int main()
{
    
    
	int a = 10;
	int b = 20;
	swap01(a, b);
	cout << "01 a = " << a << endl;
	cout << "01 b = " << b << endl;

	swap02(&a, &b);
	cout << "02 a = " << a << endl;
	cout << "02 b = " << b << endl;

	swap03(a, b);
	cout << "03 a = " << a << endl;
	cout << "03 b = " << b << endl;

	system("pause");
	return 0;

}

Resultado de salida
Inserte la descripción de la imagen aquí

4. Referencia como valor de retorno de la función

Las referencias pueden existir como el valor de retorno de una función
[Nota] No devuelva referencias de variables locales.
Uso: las llamadas a funciones se utilizan como valores l

Ejemplo

#include<iostream>
using namespace std;

//不要返回局部变量的引用
int& test01()  //相当于用引用的方式返回
{
    
    
	int a = 10;
	return a;
}

int& test02()
{
    
    
	static int a = 10;//静态变量存放在全局区,不会自动释放
	return a;
}

int main()
{
    
    
	int &ref = test01();
	cout << "ref = " << ref << endl;//第一次结果正确,以为编译器对其值进行保留
	//cout << "ref = " << ref << endl;//第二次结果错误,因为该值已被释放

	int &ref02 = test02();
	cout << "ref02 = " << ref02 << endl;//不论再次调用多少次,都会正常执行
	cout << "ref02 = " << ref02 << endl;

	system("pause");
	return 0;

}

La esencia de la referencia: es una constante de puntero implementada en C ++

Constante de puntero: el punto del puntero no se puede cambiar, pero el valor del puntero se puede cambiar

Referencia constante:Se utiliza principalmente para modificar parámetros formales para evitar un mal funcionamiento
En la lista de funciones, puede agregar const para modificar los parámetros formales para evitar que los parámetros formales cambien los parámetros reales. Después de
agregar const, se convierte en solo lectura y no se puede modificar (similar a la transferencia de direcciones)

Dos, mejora de la función

1. Parámetros predeterminados de la función

En C +++, los parámetros formales en la lista de parámetros formales de la función pueden tener valores predeterminados

gramática:返回值类型 函数名 (参数 = 默认值){ }

La declaración de función y la implementación de la función solo pueden tener un parámetro predeterminado

Ejemplo

#include<iostream>
using namespace std;

int func(int a, int b, int c );  //函数声明

int main()
{
    
    
	cout << "不给默认值传入参数";
	cout << func(10) << endl;

	cout << "给默认值传入参数";
	cout << func(10,20) << endl;
	
	system("pause");
	return 0;

}

//函数实现
//如果自己在主函数中传入参数,则就用传入的参数,如果没有传入,则用默认值
int func(int a, int b = 10, int c = 30) //如果给了b默认参数,则b右边的参数都得有默认参数
{
    
    
	return a + b + b;
}

2. Parámetros de marcador de posición de función

Puede haber un parámetro de marcador de posición en la lista de parámetros formales de una función en C ++, que se utiliza como marcador de posición, y la posición debe llenarse cuando se llama a la función

gramática:返回值类型 函数名 (数据类型) { }

Ejemplo

#include<iostream>
using namespace std;

//占位参数
void func1(int a, int  )
{
    
    
	cout << "hello world" << endl;
}
//占位参数可以有默认值
void func2(int a, int = 10)
{
    
    
	cout << "hello world" << endl;
}

int main()
{
    
    
	func1(10, 1);//占了位就必须往里面传数
	func2(10); //占位参数有默认值时,可以不传入数据

	
	system("pause");
	return 0;

}

3. Sobrecarga de parámetros

Los nombres de las funciones pueden ser los mismos para mejorar la reutilización

La sobrecarga de funciones satisface la condición

  • En el mismo ámbito

  • Mismo nombre de función

  • Los tipos de parámetros de función son diferentes o el número es diferente o el orden es diferente

El valor de retorno de una función no se puede utilizar como condición para la sobrecarga de funciones.

Ejemplo

#include<iostream>
using namespace std;

//1、func函数都在全局域
//2、函数名不同
//参数类型不同    符合函数重载条件
void func()
{
    
    
	cout << "func 的调用" << endl;
}

void func(int a)
{
    
    
	cout << "有参数的func 调用" << endl;
}

int main()
{
    
    
	
	func();
	func(10);
	system("pause");
	return 0;

}

Notas sobre la sobrecarga de funciones

  1. Cuando se cita como condición de sobrecarga
  2. La sobrecarga de funciones encuentra los parámetros predeterminados de la función

Ejemplo

#include<iostream>
using namespace std;

//1、引用作为重载条件
void func(int &a) //int &a=10;是不合法的语法,所以腐女吧(10)无法调用此函数
{
    
    
	cout << "func(int &a) 的调用" << endl;
}

void func(const int &a)
{
    
    
	cout << "func(const int &a) 的调用" << endl;
}

//2、函数重载碰到默认参数
void func2(int a,int b = 10)
{
    
    
	cout << "func(int a,int b) 的调用" << endl;
}

void func2(int a)
{
    
    
	cout << "func(int a) 的调用" << endl;
}

int main()
{
    
    
	int a = 10;
	func(a); 
	func(10);

	//func2(10);//当函数重载有默认参数时,出现两个够可以调用的情况,会出错

	system("pause");
	return 0;

}

[Nota] El curso de aprendizaje es-Tutorial de C ++ del Programa Dark Horse

Supongo que te gusta

Origin blog.csdn.net/qq_42616280/article/details/113244708
Recomendado
Clasificación