C Quack~~[La realización de la clase de fecha en la segunda parte de la clase]

6. miembros constantes

6.1 Introducción de miembros const

class Date
{
    
    
public:
    // 构造函数
	Date(int year = 2023, int month = 5, int day = 5)
	{
    
    
		_year = year;
		_month = month;
		_day = day;
	}

	void Print()
	{
    
    
		cout << _year << " " << _month << " " << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{
    
    
	Date d1(2023, 5, 8);
	d1.Print(); // 可以运行

	const Date d2(2023, 5, 9);
	d2.Print(); // error C2662: “void Date::Print(void)”: 
	           // 不能将“this”指针从“const Date”转换为“Date &”
}
  • ¿Por qué sucede esto? ¿Qué significa "no se puede convertir este puntero de const Fecha a Fecha &" en el informe de error?
  • Entonces, ¿cómo resolver este tipo de problema de amplificación de autoridad?

Sabemos que el puntero this no se muestra en los parámetros de línea y los parámetros reales, y la puerta está soldada; ¿cómo agregamos const a este puntero? En este momento, nuestros antepasados ​​introdujeron el miembro
const

6.2 El concepto de miembros constantes

Las funciones miembro modificadas por const se llaman funciones miembro const, de hechoconst se modifica por el puntero implícito this⇒ indica que ningún miembro de la clase puede ser modificado en esta función miembro

class Date
{
    
    
public:
    // 构造函数
	Date(int year = 2023, int month = 5, int day = 5)
	{
    
    
		_year = year;
		_month = month;
		_day = day;
	}

	void Print() const
	{
    
    
		cout << _year << " " << _month << " " << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{
    
    
	Date d1(2023, 5, 8);
	d1.Print(); 

	const Date d2(2023, 5, 9);
	d2.Print(); 
	
}

*****
2023 5 8
2023 5 9
*****

A través de los ejemplos anteriores, podemos encontrar fácilmente que la función const es muy fácil de usar⇐Tanto los objetos ordinarios como los objetos constantes pueden llamar a funciones miembro constantes.Entonces
no estamos dispuestos a convertir cada función miembro en una función miembro constante??⇐ La respuesta es obvia: por supuesto que no, porque algunas funciones miembro van a modificar las variables miembro, y la función miembro constante no puede ser correcta Las variables miembro son modificado

Siempre que la variable miembro no se modifique dentro de la función miembro, use la función miembro const


Reponer:

  • Los punteros y las referencias tienen permiso, mientras que otros no tienen permiso~

7. Implementación de la clase de fecha

Supongo que te gusta

Origin blog.csdn.net/qq_67549203/article/details/130553469
Recomendado
Clasificación