Desarrollo avanzado orientado a objetos de C++ (Hou Jie)

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)

imagen-20220427095344037

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

imagen-20220427100007930

constructor constructor

Nombre mismo nombre, no se requiere tipo de valor de retorno.

imagen-20220427100953700

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

imagen-20220427101339594

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

imagen-20220427102003705

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

imagen-20220427203509047

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.

imagen-20220427203714465

Cada objeto de la misma clase es amigo del otro (amigos)

imagen-20220427203916858

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

imagen-20220427204946549

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

Supongo que te gusta

Origin blog.csdn.net/chuxuezhe8483/article/details/124460984
Recomendado
Clasificación