0% encontró este documento útil (0 votos)
15 vistas188 páginas

Buenas prácticas y convenciones en C++

El documento presenta información sobre diferentes temas de programación en C++ como el uso de llaves y namespaces para inicializar variables y evitar colisiones de nombres respectivamente. También discute buenas prácticas de formato de código, reglas para los nombres de identificadores, tipos de datos y funciones.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas188 páginas

Buenas prácticas y convenciones en C++

El documento presenta información sobre diferentes temas de programación en C++ como el uso de llaves y namespaces para inicializar variables y evitar colisiones de nombres respectivamente. También discute buenas prácticas de formato de código, reglas para los nombres de identificadores, tipos de datos y funciones.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Para iniciar un tipo de datos simples se utiliza la segunda opción para datos mas

complejos es recurrente utilizar las llaves.

El carácter de salto de línea es mas limpio que std::endl


Ser recomienda inicializar las variables entre llaves asi no se les declare ningún valor.
Por que no es bueno dejar sin inicializar una variable por que el sistema le asignara un
espacio en memoria.

1
REGLAS DE NOMBRES IDENTIFICADORES

2
1. No puede ser una palabra clave
2. Compuesta por letras mayúsculas o minúsculas, números y el guion y el carácter
bajo _
3. Debe empezar con letra o guion bajo, no números.
4. Case sensitive

CONVENCIONES Y BUENAS PRACTICAS

3
ESPACIOS EN BLANCO EN EL CODIGO MODO DE FORMATEAR

4
1. ESPACIOS
2. TABULACIONES
3. NUEVAS LINEAS

Se c++ ignora los espacios en blanco. PERO SE TOMARÁ EN CUENTA LOS


ESPACIOS EN BLANCO, PERO LOS QUE ESTEN EN ENTRE COMILLAS.

5
Es bueno no pasar de 80 caracteres.

LITERALES, OPERADORES Y EXPRESIONES.

6
En este ejemplo la función foo() esta definida dentro de la función main.

7
VALORES DE RETORNO

8
9
FUNCONES PROPOTIPO O FUNCIONES ANTICIPADAS

10
DIVIDIR ARCHIVOS EN MULITPLES PROGRAMAS

Si se crea un archivo desde nuevo archivo se crea pero no se añade al que ya está.

11
12
NAME SPACES

Con identificadores

globales puede suceder.

13
Es una buena practica utilizar los namespace como identificadores para las funciones,
ya que permite identificar al compilador, si una función creada o de la biblioteca
impidiendo que hallan errores o colisiones
.

DIRECTIVAS DEL PREPROCESADOR


#include <iostream>
#define MI_NOMBRE “Bob” se desaconseja la
utilización.

14
Esta práctica es un forma de
declarar varias const pero en
este C++ se desaconseja
utilizarlas. Sin embargo, sigue
siendo útil cuando no se le
indica un texto de sustitución. Al
no colocar nada, sirve como
directivas de procesamiento
precondicional. Permite
especificar algo bajo de
condiciones se compilara o no.

Estas son las que mas se usan.

15
Esta sirve para excluir un bloque de la
compilación. Un tipo de comentarios que no
permite anidamiento.

Podemos crear archivos


Header que me permita
utilizar esas funciones en

16
otros archivos, colocando como encabezados para que sea lo primero que busque el
preprocesador.

Para agregar
un archivo
Header a un
proyecto se
hace desde
Archivos de
encabezado.

Se recomienda guardarlo con extensión

(.h)
Se recomienda que el archivo header tenga el mismo nombre como base, mas no
necesariamente que sea igual completamente.

17
Del ejemplo tres:
[Link] y Sumar.h
deben tener el mismo
nombre.

18
Si un identificador se define mas de una vez causara un error de compilación. Para
variables como para funciones.

19
Recordando que si el archivo CUADRADO esta #define definido en otro archivo no
copiará este, pero sino lo esta entonces si lo hará evitando el conflicto entre dos o mas
iguales.

 Cuando definimos una variable un parte de la memoria RAM se reserva para esa
memoria.

20
 La unidad más pequeña de memoria es un digito binario llamado bit. Que puede
tener un valor de 0 o 1. En este sistema
se pueden escribir infinitos números.
La memoria esta organizada en unidades
secuenciales
llamadas
direcciones de
memoria.

21
22
En la mayoría de programas String es
fundamental o tomado como un dato
primitivo, sin embargo, en C++ es tomado como un compuesto.

TAMANO DE LOS OBJETOS EN C++

Se aconseja dejar vacío


o mejor dicho implícito.

Un byte contiene 8 bits.

Estos me dan la cantidad de valores posibles dentro de 8 bits.

23
24
Devuelve el
tamaño del tipo
de dato.

25
DESBORDAMIENTO

26
27
28
29
boolalpha devuelve true o false.

30
Setlocale permite escribir caracteres castellanos que no existen en el inglés.

CONVERSION DE TIPOS Y STATIC_CAST

31
32
33
34
35
CONSTANTES
Es un valor fijo que no se puede cambiar.

36
CONSTANTES EN TIEMPO DE EJECUCION Y TIEMPO DE COMPILACION

37
Son constantes en tiempo de ejecución por que el compilador no puede determinar su
valor hasta que es ejecutado.

38
CONSTANTES SIMBOLICAS

39
40
41
42
43
NAMESPACES

44
45
AHORA CON EL OTRO ARCHIVO CPP

46
47
48
49
VARIABLES GLOBALES

50
51
52
OCULTACION DE VARIABLES

53
54
55
Las variables constans y las static funcionan como variables locales lo cual hace que
cuando ejecute una dentro de clases diferentes no genere un error en ejecución.
Static y constan vinculan las variables de forma interna.

La vinculación interna limita el uso del identificador a un único archivo.

56
Pasaría a tener vinculación interna,
permitiéndose solo mostrarse
dentro del archivo definido.

57
VARIABLES INLINE
El uso de las variables globales constantes compartidas a través de otros archivos
mediante variables inline.

Ejercicios en pagina 104

58
De esta forma solo habrá una copia global y no una copia por cada archivo que acceda
al archivo por eso debe ser extern y con los archivos .h y .cpp

59
60
61
62
DECLARACIONES GO TO

63
FOR

64
SALIDAS
ANTICIPADAS
HALTS

65
Se consideran promociones numéricas cuando se convierte
de un tipo pequeño a unos mas grande de resto se considera
conversiones numéricas.

66
67
Esto es lo más recomendable.

68
69
CASTING

Este permite verificación en tiempo de compilación a diferencia del cast estilo permite
detectar, pero en tiempo de ejecución.

70
71
Por eso auto no esta tan
familiarizado con funciones.

ARGUMENTOS PREDETERMINADOS

72
73
El problema con la sobrecarga de las funciones es que para especificar cada función
debemos escribir cada una y pasarle la cantidad de datos que necesita.
En C++ se pueden crear plantillas tanto para funciones como para clases. El
programador solo tendrá que crear una plantilla y posteriormente será el compilador
que realizara familias sobrecargadas.

Mas adelantes veremos plantillas


para programación orientada
objetos.

74
75
76
Cuando los parámetros que se le pasan a la función son iguales y no hay contradicción,
se puede especificar de forma simple, como llamando a una función normal.

77
78
TIPOS DE DATOS AGREGADOS ARRAYS

Un arrays es aquel que su longitud se conoce en el momento de su compilación.

79
80
81
82
83
Sale un error porque la forma
como se le pasa a las funciones es
moviéndolos no copiándolos, eso
quiere decir que el arrays size los
copia.

84
85
86
87
88
89
90
91
ARRAYS Y PUNTEROS

92
93
94
95
96
TIPOS COMPUESTOS

97
98
REFERENCIAS LVALUE

99
REFERENCIAS LVALUE CONST

100
101
PASAR POR
REFERENCIA
FRENTE AL PASO
POR VALOR

102
103
104
105
¿CUÁNDO PASAR POR REFERENCIA Y CUANDO POR VALOR?

 En general los tipos mas costosos se suelen pasar por referencia Const
 Mientras los tipos fundamentales se suelen pasarse por valor

106
 Sin embargo el costo de una copia depende de su tamaño y si necesita
instalaciones adicionales. Pero las referencias también un pequeño costo que no
tiene pasar por valor.

Esta formula permite identificar si una copia es o no menos, si ocupa dos o menos
direcciones de memoria multiplicado por su tamaño total y no tiene costos adicionales
de instalación.

PUNTEROS NULOS

107
108
109
110
Es importante diferencias los punteros a Const y Const

111
112
113
114
115
116
117
118
RETURN POR REFERENCIA Y DIRECCION

119
120
121
122
TIPOS DE DATOS
COMPUESTOS
POR EL
USUARIO

123
LAS DEFINICIONES DE USUARIO SON LA EXCEPCION DE LA REGLA Y SE
DEBEN COLOCAR NO LA DEFINICION ANTICIPADA SINO DEFINICION COMPLETA

ENUMS

ENUMS SIN
AMBITO

124
125
ENTRADA Y SALIDA DE ENUMS SIN AMBITO

126
Cada valor dentro enum debe ser una constante simbólica, aunque no se le indique.

En este
utilizamos
referencias
porque
estamos
trabajando con
String por lo
cual queremos
evitar las
copias.

127
128
ENUMS CON AMBITO

129
Para enums sencillos if else puede servir.

130
TIPOS DE USUARIO STRUCTS

Los Struct
y las class
no son
iguales,
pero casi.
En los
Struct la

información almacenada es por defecto publico mientras que


en clase se maneja varios modificadores de acceso. Aunque
en un video atrás vimos que también es posible modificar los
Struct.

131
132
133
134
Es devuelto por valor no por referencia ya que la refencia de cero se convertiría en
colgante.

135
No es muy
limpia

136
137
OPERACIONES DE SUMA Y RESTA ENTRE PUNTEROS

138
139
140
141
142
143
144
145
146
al ser dinamico los arrays permite crear arrays con grandes valores sin que se
produzcan desbordamientos.

147
148
149
sirve para recorrer las listas completas
.

150
151
152
PUNTEROS VOID

153
154
Los punteros void no saben a dónde a puntar y deben convertirse explícitamente.

155
156
157
158
159
160
161
STD VECTOR

162
163
164
165
166
167
168
169
En el video 113 se explica la diferencia de pasar datos mediante diferentes loops

170
171
172
173
174
Hoy es una variable de tipo fecha.

se pueden definir dentro de la clase fecha como fuera de la clase, mas adelante se
definirá de otra manera esta clase.

175
Como la función
esta integrada en ella no es necesario pasarle datos al método imprimir

176
177
178
179
180
FUNCIONES DE ACCESO Y ENCAPSULACION

GETTERS AND SETTER

181
A veces para no
modificación de la variable
es necesario solamente
implementar el getter
porque no necesitamos
modificar sus datos o
podría causar un error.

PRIVACIDAD DE GETTERS

Hay que garantizar que los


getters sean de solo lectura
mediante paso por valor o
por referencia const. Por
que el llamador puede
aplicar cambias a la
constante que se aplicaran
también a la constante
miembro privada original causando un error.

Mejor practia getters


devolver por referencia
const o por valor.

182
Mirarlo después creación de namespaces con clases
[Link]

CONSTRUCTORES

183
INICIALIZACION DE UN CONSTRUCTOR MEDIANTE LISTA

La asignación es diferente a la inicialización. La lista en un constructor sirve para


inicializar a una constante un valor. Ya que no se le esta asignando sino inicializando.
Que es diferente.
se puede
inicializar con
paréntesis pero
es
desaconsejado.

184
185
También podemos inicializar clases y parámetros de otras clases.

186
INICIALIZACION DE MIEMBROS NO-STATIC

La inicialización en lista, siempre se impondrá sobre las variables de clase

187
188

También podría gustarte