Desarrollo avanzado orientado a objetos de C++ (Hou Jie)
Estudio sistemático de c ++, tomando notas principalmente de escuchar la clase del Sr. Hou Jie.
Introducción a la programación en C++
Evolución de C++
Recomendación de libro:
"C++ eficaz"
"Análisis de código fuente Stl"
C vs C++ en datos y funciones
c Crear variables a través de tipo (incorporado, estructura)
C++ Crear objetos a través de clase, estructura (incluidos miembros y funciones)
Clasificación clásica de clases: con punteros (plural) y sin punteros (cadena)
basado en objetos vs orientado a objetos
Basado en objetos: el diseño de una sola clase
Orientado a objetos: el diseño de múltiples clases, la relación entre clases.
Forma básica de código para un programa C++
.h ("") + .cpp + .h (biblioteca estándar, <>)
salida c y c++
cout e printf
declaración de guardia en el archivo de encabezado
Solo se define para la primera referencia, y solo se hace referencia repetidamente si se define.
#ifndef __header_name__
#define __header_name__
#endif
Diseño de archivos de encabezado
#ifndef __header_name__
#define __header_name__
1.前置声明
class ostream;
class complex;
2.类-声明
class complex
{
}
3.类-定义
complex::function..
#endif
declaración de clase
class complex //class head
{
//class body
}
Introducción a las plantillas
modelo
Constructor
función en línea
La función en línea se define en el cuerpo
de la clase.Características: Se ejecuta más rápido. El cuerpo de la función es simple
(en última instancia, depende del compilador decidir si está en línea o no)
(ahora el compilador realiza automáticamente la optimización en línea)
nivel de acceso
público función pública depende de la situación
privado datos privados miembro
proteger protección
usa la diferencia
constructor constructor
Nombre mismo nombre, no se requiere tipo de valor de retorno.
Lista de inicialización de sintaxis especial para constructores
Dos etapas: inicialización, asignación
Simple diferencia: el proceso de asignación es diferente, lo que puede mejorar la eficiencia
La mayoría de las clases sin punteros no necesitan escribir destructores
Los constructores pueden tener muchos (sobrecargados)
Sobrecarga desde el punto de vista del compilador
El compilador compila una función que forma dos nombres.
Paso de parámetros y valor de retorno
Patrón de diseño: el constructor de clase singleton singleton
colocado en privado no permite que el mundo exterior cree objetos
funciones miembro const
Agregue const después de la función --> tome los datos sin cambiar el contenido de los datos
Paso de parámetros: pasar por valor (parámetro) vs. pasar por referencia (a const)
pasar por valor, pasar por puntero, pasar por referencia
La referencia a la implementación subyacente es una constante de puntero.
Una referencia & está debajo del capó tan rápido como pasar un puntero.
(Sr. Hou Jie: Buen hábito: es mejor pasar referencias)
Si no desea modificar el valor de referencia original,
use const name&
Parámetro de un byte/dos bytes: puede ser un parámetro formal
Paso de valor de retorno: retorno por valor frente a retorno por referencia (a const)
Valor devuelto si es posible --> pasar por referencia
amigo
La función de amigo puede obtener libremente los datos privados de los miembros de un amigo.
Las funciones de amigos son funciones externas, no funciones de miembros, pero con los mismos permisos, todos pueden acceder a datos privados de los miembros.
Cada objeto de la misma clase es amigo del otro (amigos)
Definiciones fuera del cuerpo de la clase
¿Cuándo se puede devolver una referencia?
En qué circunstancias puede volver por referencia
- La ubicación de almacenamiento del resultado de una operación de función. Si se trata de una variable local recién creada, no se puede usar la referencia.
- La ubicación donde existe el resultado de la operación no se publicará después de que finalice la función (es decir, la ubicación original), puede usar el paso de referencia
Sobrecarga de operadores y objetos temporales
Sobrecarga de operadores: función de miembro de sobrecarga de 1 operador
¿Cómo trata el compilador la sobrecarga de operadores?
Cualquier función miembro tiene un parámetro oculto, esto, esto es un puntero, que apunta al objeto que llama
La función sobrecargada puede ser una función miembro o una función no miembro
<< solo se puede escribir como una función no miembro
El pasador no necesita saber que el receptor se recibe en forma de referencia
sobrecarga de símbolo de función no miembro
nombre de tipo de objeto temporal ();
Se crea un objeto temporal dentro de la función, y se destruye cuando sale de la función.El retorno no puede ser una referencia.
–> retorno por valor
class name typename(), --> crear un objeto temporal --> similar a int() cast?
ten cuidado
- Considere si agregar const
- pasar por referencia
- Devuelve si usar una referencia
- datos en privado
- ubicación de la función
Revisar el proceso de implementación de la clase compleja
Considere si la función agrega const