2021-02-09 Regístrese y aprenda C ++ por noveno día


Uno, clase y objeto

1. Paquete

Para obtener más información, consulte el contenido del octavo día de aprendizaje.

2. Inicialización y limpieza de objetos

La orientación a objetos en C ++ viene de la vida, cada objeto también tendrá configuraciones iniciales y configuraciones para limpiar los datos antes de que se destruya el objeto

(1) Constructor y destructor

Objeto deinicializaciónconLimpiarTambién son dos cuestiones de seguridad muy importantes

  • Un objeto o variable no tiene un estado inicial y se desconocen las consecuencias de su uso.
  • Del mismo modo, después de usar un objeto o variable, si no se limpia a tiempo, también causará ciertos problemas de seguridad.

Constructor: Se utiliza principalmente para asignar valores a las propiedades miembro del objeto cuando se crea el objeto. El compilador invoca automáticamente el constructor sin invocación manual.

Destructor: la función principal es llamar automáticamente al sistema antes de que el objeto sea destruido para realizar algún trabajo de limpieza

Se requieren tanto la construcción como la destrucción. Si no lo escribe usted mismo, el compilador lo agregará automáticamente, pero el sistema proporciona una implementación vacía

Sintaxis del constructor :类名 () { }

  1. Constructor, sin valor de retorno ni escritura nula
  2. El nombre de la función es el mismo que el nombre de la clase.
  3. El constructor puede tener parámetros, por lo que puede ocurrir una sobrecarga
  4. El programa llamará automáticamente a la estructura cuando llame al objeto, no es necesario llamarlo manualmente y solo se llamará una vez.

Sintaxis del destructor :~类名() { }

  1. Destructor, sin valor de retorno ni escritura nula
  2. El nombre de la función es el mismo que el nombre de la clase, con el símbolo ~ delante del nombre
  3. El destructor no puede tener parámetros, por lo que no se puede producir una sobrecarga.
  4. El programa esAntes de que el objeto sea destruidoEl destructor se llamará automáticamente, no se requiere una llamada manual y solo se llamará una vez

Ejemplo comparativo

#include<iostream>
using namespace std;

//创建类
class person
{
    
    
public:
	//1、构造函数
	person()
	{
    
    
		cout << "person构造函数的调用" << endl;
	}
	//2、析构函数
	~person()
	{
    
    
		cout << "person析构函数的调用" << endl;
	}
};

void test01()
{
    
    
	person p;
}
int main()
{
    
    
	test01();

	system("pause");
	return 0;
}

Inserte la descripción de la imagen aquí

#include<iostream>
using namespace std;

//创建类
class person
{
    
    
public:
	//1、构造函数
	person()
	{
    
    
		cout << "person构造函数的调用" << endl;
	}
	//2、析构函数
	~person()
	{
    
    
		cout << "person析构函数的调用" << endl;
	}
};

void test01()
{
    
    
	person p;
}
int main()
{
    
    
	//test01();
	person p;
	system("pause");
	return 0;
}

Inserte la descripción de la imagen aquí

(2) Clasificación y llamada de constructor

Dos métodos de clasificación:

  1. Clasificados por parámetros: estructura parametrizada y estructura no parametrizada
  2. Clasificados por tipo: construcción ordinaria y construcción de copias

Tres métodos de llamada:

  1. Horquillado
  2. Método de visualización
  3. Conversión implícita

Precauciones
== 1. Cuando llame al constructor predeterminado, no agregue (), el compilador pensará que esta es una declaración de función ==
== 2. No use el constructor de copia para inicializar objetos anónimos ==

Código de muestra

#include<iostream>
using namespace std;

//创建类
class person
{
    
    
public:
	//1、构造函数
	person()
	{
    
    
		cout << "person无参构造函数的调用" << endl;
	}

	person(int a)
	{
    
    
		age = a;
		cout << "person有参构造函数的调用" << endl;
	}

	//拷贝构造函数
	person(const person &p)  //拷贝构造函数写法
	{
    
    
		//将传入的人身上的所有属性,拷贝到此函数内人的身上
		age = p.age;
		cout << "person拷贝构造函数的调用" << endl;
	}
	//2、析构函数
	~person()
	{
    
    
		cout << "person析构函数的调用" << endl;
	}

	int age;
};

//调用
void test01()
{
    
    
	//1、括号法
	cout << "1、括号法" << endl;
	person p1;//默认构造函数的调用
	person p2(10);//有参构造函数
	person p3(p2);//拷贝函数
	cout << "\n";

	//2、显示法
	cout << "2、显示法" << endl;
	person p4;
	person p5 = person(10);
	person p6 = person(p2);

	cout << "\n";
	cout << "匿名对象,执行结束后立即释放" << endl;
	person(10);//匿名对象  当前行执行结束后,系统会立即回收掉匿名对象
	cout << "123456" << endl;
	cout << "\n";

	//3、隐式转换法
	cout << "3、隐式转换法" << endl;
	person p7 = 10;//相当于写了person p6=person(10);//有参构造
	person p8 = p4;//拷贝构造
}
int main()
{
    
    
	test01();

	system("pause");
	return 0;
}

Inserte la descripción de la imagen aquí

(3) Cuándo llamar al constructor de copias

  • Utilice un objeto ya creado para inicializar un nuevo objeto
  • Pasar valor al parámetro de función por valor
  • Devolver objetos locales por valor

(4) Reglas de llamada al constructor

De forma predeterminada, el compilador de C ++ agrega al menos 3 funciones a una clase

  1. Constructor predeterminado (sin parámetros, el cuerpo de la función está vacío)
  2. Destructor predeterminado (sin parámetros, el cuerpo de la función está vacío)
  3. El constructor de copia predeterminado, copia el valor del atributo

Reglas de llamada al constructor:

  • Si el usuario define un constructor de parámetros, C ++ ya no proporciona una construcción sin parámetros predeterminada, pero proporcionará una construcción de copia predeterminada
  • Si el usuario define un constructor de copia, C ++ no proporcionará otros constructores

[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/113369032
Recomendado
Clasificación