﻿1
00:00:04,370 --> 00:00:05,510
‫Hola y bienvenido.

2
00:00:05,510 --> 00:00:12,020
‫En esta lección vamos a aprender sobre referencias y alternativas a los punteros, y vamos a ver por qué

3
00:00:12,020 --> 00:00:14,600
‫son diferentes, por qué podríamos querer usarlos.

4
00:00:14,870 --> 00:00:16,100
‫Sumerjámonos y veamos.

5
00:00:17,280 --> 00:00:22,980
‫Entonces, además de los punteros, hay un concepto relacionado muy similar llamado referencia.

6
00:00:23,340 --> 00:00:28,920
‫Ahora tanto los punteros como las referencias son esencialmente solo una dirección de memoria.

7
00:00:28,930 --> 00:00:36,420
‫Ambos almacenan una referencia a dónde se puede encontrar otra variable y, de esta manera, son increíblemente

8
00:00:36,420 --> 00:00:37,020
‫similares.

9
00:00:37,260 --> 00:00:43,080
‫La diferencia entre los dos se reduce básicamente a si se pueden reasignar.

10
00:00:43,090 --> 00:00:48,420
‫Básicamente, ¿pueden apuntar a una dirección diferente después de que se crearon por primera vez?

11
00:00:48,780 --> 00:00:51,270
‫En el caso de un puntero, esa respuesta es sí.

12
00:00:51,630 --> 00:00:57,600
‫Puede cambiar un puntero para que apunte a una nueva dirección de memoria, un nuevo actor, un nuevo componente cuando lo

13
00:00:57,600 --> 00:00:59,610
‫desee, siempre que tenga el tipo correcto.

14
00:01:00,180 --> 00:01:06,360
‫Una referencia, por otro lado, solo se puede configurar una vez cuando la crea por primera vez para apuntar a otra

15
00:01:06,360 --> 00:01:06,870
‫variable.

16
00:01:07,200 --> 00:01:09,240
‫Entonces no se puede cambiar de nuevo.

17
00:01:09,540 --> 00:01:16,230
‫Y esta es una característica de seguridad porque volver a apuntar las variables puede generar problemas en los que

18
00:01:16,230 --> 00:01:21,210
‫esas variables pueden desaparecer o en los que establece ese puntero en nulo.

19
00:01:21,480 --> 00:01:27,990
‫Un puntero nulo es esencialmente un puntero que no apunta a nada y tratar de hacer cosas con un punto que no

20
00:01:27,990 --> 00:01:35,010
‫se establece en nada puede bloquear su motor, lo cual no es un resultado ideal con las referencias porque tiene que darles un valor

21
00:01:35,010 --> 00:01:37,140
‫cuando crea por primera vez. a ellos.

22
00:01:37,500 --> 00:01:41,490
‫No pueden ser nulos, por lo que no puede obtener estos bloqueos de puntero nulo.

23
00:01:42,030 --> 00:01:45,520
‫Entonces, comencemos a echar un vistazo a algunas de las sintaxis involucradas.

24
00:01:45,720 --> 00:01:50,850
‫Entonces, cuando accede al contenido con un puntero, debe usar alguna sintaxis especial.

25
00:01:50,850 --> 00:01:55,860
‫Tienes que poner esta estrella delante del puntero para asegurarte de que obtienes el valor en el

26
00:01:55,860 --> 00:02:01,050
‫puntero, no la dirección de memoria con referencias porque en realidad nunca necesitas obtener la dirección de memoria.

27
00:02:01,260 --> 00:02:06,200
‫Simplemente puede usar la variable como si fuera la variable a la que apunta.

28
00:02:06,210 --> 00:02:08,190
‫No tienes que usar ninguna sintaxis especial.

29
00:02:08,910 --> 00:02:15,180
‫Ahora está el acceso a la dirección, por lo que con los punteros obtienes la dirección automáticamente.

30
00:02:15,480 --> 00:02:18,690
‫Cuando usa la variable con una referencia, debe usar una sintaxis especial.

31
00:02:18,690 --> 00:02:24,450
‫Para hacer eso, debe usar la dirección del operador y obtendrá básicamente la misma dirección

32
00:02:24,450 --> 00:02:26,430
‫que la variable original.

33
00:02:27,270 --> 00:02:30,690
‫Y luego está el cambio de dirección con un puntero.

34
00:02:30,690 --> 00:02:35,790
‫Hemos visto que puede asignar la dirección y usar la dirección de operaciones para hacer eso con referencias.

35
00:02:35,800 --> 00:02:37,890
‫Esto no está permitido, por lo que no hay sintaxis para ello.

36
00:02:38,100 --> 00:02:43,800
‫Y finalmente, ¿qué sucede si queremos cambiar el valor al que estamos apuntando, no la dirección, sino el valor

37
00:02:43,800 --> 00:02:45,960
‫real que se almacena en esa dirección?

38
00:02:46,350 --> 00:02:50,730
‫Bueno, con los punteros, tienes que volver a usar alguna sintaxis especial.

39
00:02:50,730 --> 00:02:53,220
‫Tienes que poner esa estrella y luego asignar algo.

40
00:02:53,220 --> 00:03:00,210
‫Entonces, el puntero del actor lo asigna al puntero del actor estrella con referencias nuevamente, porque no puede cambiar

41
00:03:00,210 --> 00:03:03,240
‫la dirección real, no necesita ninguna sintaxis adicional.

42
00:03:03,240 --> 00:03:07,170
‫Podemos eliminar la sintaxis adicional y simplemente hacer que la referencia del actor sea igual.

43
00:03:07,170 --> 00:03:12,690
‫Actor significa que está sobrescribiendo el valor en la ubicación a la que apunta.

44
00:03:12,900 --> 00:03:14,220
‫Así que todo eso es un poco teórico.

45
00:03:14,220 --> 00:03:16,170
‫Tengamos un ejemplo real.

46
00:03:16,170 --> 00:03:24,480
‫Entonces, si tuviéramos un flotador que quizás estuviera almacenando el daño que se nos hizo en el juego y en el que estamos almacenando, el

47
00:03:24,480 --> 00:03:26,610
‫daño actual se establece en cero.

48
00:03:26,610 --> 00:03:28,080
‫Nadie nos ha hecho daño.

49
00:03:28,500 --> 00:03:33,840
‫Ahora podríamos querer crear una referencia a esto en lugar de copiarlo, podríamos querer pasarlo

50
00:03:33,840 --> 00:03:36,690
‫a una función, pero sin cambiarlo realmente.

51
00:03:37,110 --> 00:03:42,510
‫La forma en que podemos hacer esto es tener un flotador y luego colocar el ampersand después del flotador.

52
00:03:42,750 --> 00:03:45,360
‫Y el ampersand dice que esta es una referencia a un flotador.

53
00:03:45,360 --> 00:03:49,410
‫No es un nuevo flotador en sí mismo, no asigna ninguna memoria flotante.

54
00:03:49,410 --> 00:03:51,150
‫Simplemente asigna memoria de puntero.

55
00:03:51,630 --> 00:03:56,910
‫Y entonces podemos llamar a esto la referencia dañada y podemos igualarlo a daño.

56
00:03:56,910 --> 00:04:00,120
‫No tenemos que tomar la dirección de ni hacer nada por el estilo.

57
00:04:00,450 --> 00:04:04,470
‫Automáticamente sabe, bueno, esto es una referencia y esto es una variable.

58
00:04:04,470 --> 00:04:08,550
‫Entonces, lo que está tratando de hacer aquí es configurar una referencia a esa variable.

59
00:04:08,820 --> 00:04:15,840
‫Y efectivamente, si vamos y registras, entonces podemos imprimir esto como si fuera solo un flotador regular

60
00:04:15,840 --> 00:04:24,120
‫para que podamos decir dos puntos de daño y luego porcentaje F y luego aquí podemos hacer solo un daño de impresión.

61
00:04:24,120 --> 00:04:25,830
‫Ref No necesitamos una sintaxis especial.

62
00:04:25,830 --> 00:04:28,230
‫Podemos usarlo como una variable regular.

63
00:04:28,440 --> 00:04:33,930
‫Avancemos y presionemos reproducir después de compilar, observemos nuestro registro de salida y, por supuesto, el

64
00:04:33,930 --> 00:04:37,470
‫daño es cero, que fue el valor que establecimos.

65
00:04:37,740 --> 00:04:43,170
‫Pero eso no prueba necesariamente que no haya hecho una copia de esa variable original, así que me

66
00:04:43,170 --> 00:04:46,980
‫gustaría desafiarlo a intentar cambiar el valor y ver qué sucede.

67
00:04:46,980 --> 00:04:54,030
‫Entonces use la referencia, la referencia al daño, para establecer un nuevo valor y luego imprima el

68
00:04:54,030 --> 00:05:01,260
‫valor original para que el valor original junto al valor de referencia y vea si son iguales o son

69
00:05:01,260 --> 00:05:01,740
‫diferentes.

70
00:05:01,740 --> 00:05:05,160
‫Solo cambias la referencia, pero ¿cambia también el original?

71
00:05:05,160 --> 00:05:10,560
‫Porque eso implicaría que ambos son la misma variable pausar video y probar.

72
00:05:13,850 --> 00:05:14,360
‫Bueno.

73
00:05:14,360 --> 00:05:15,060
‫Bienvenido de nuevo.

74
00:05:15,080 --> 00:05:16,280
‫Así que vamos a darle a esto una puñalada.

75
00:05:16,730 --> 00:05:22,280
‫Entonces, para cambiar la referencia ahora, vamos a hacer daño ref igual.

76
00:05:22,280 --> 00:05:27,290
‫Y esta vez voy a decir lo que hicimos cinco daños y eso es que no he tenido que usar ninguna sintaxis especial

77
00:05:27,290 --> 00:05:27,580
‫aquí.

78
00:05:27,590 --> 00:05:33,080
‫No está redireccionando la referencia porque ya la declaramos y configuramos su referencia en esa primera

79
00:05:33,080 --> 00:05:34,580
‫línea cuando se crea.

80
00:05:34,820 --> 00:05:36,170
‫No podemos hacerlo de nuevo.

81
00:05:36,320 --> 00:05:38,870
‫Así que ahora podemos simplemente establecer el valor.

82
00:05:39,470 --> 00:05:45,830
‫Entonces, lo que puedo hacer ahora es que tenemos la referencia de daños aquí en el registro.

83
00:05:46,070 --> 00:05:56,510
‫Pongamos también un daño y un porcentaje f en esa misma cadena y luego pasemos el daño aquí también.

84
00:05:57,650 --> 00:06:00,410
‫Y luego vamos a compilar y echar un vistazo.

85
00:06:00,740 --> 00:06:08,480
‫Hagamos clic en reproducir, vayamos a nuestro registro de salida y, por supuesto, está imprimiendo la referencia de daño y el daño como

86
00:06:08,480 --> 00:06:12,200
‫si ambos tuvieran el nuevo valor que hemos establecido en cinco.

87
00:06:12,380 --> 00:06:18,650
‫Entonces, en esencia, lo que tenemos aquí son dos variables que apuntan a la misma pieza de memoria.

88
00:06:18,650 --> 00:06:22,130
‫Casi se podría decir que todas son la misma variable, pero con nombres diferentes.

89
00:06:22,430 --> 00:06:28,580
‫Esto tiene la ventaja de no necesitar una copia, como un puntero, pero también tiene muchos más beneficios porque

90
00:06:28,580 --> 00:06:30,710
‫es mucho más fácil de usar.

91
00:06:30,710 --> 00:06:33,650
‫No necesitamos toda esa sintaxis adicional y también es más seguro de usar.

92
00:06:33,650 --> 00:06:39,140
‫Entonces, siempre que no necesitemos volver a pintar nada, generalmente es preferible usar referencias.

93
00:06:39,320 --> 00:06:44,780
‫Ahora hagamos una revisión rápida de algunos de los símbolos que usamos aquí porque pueden resultar un poco confusos.

94
00:06:44,780 --> 00:06:47,210
‫Se usan mucho en C++.

95
00:06:47,210 --> 00:06:52,250
‫Entonces, los símbolos de ampersand y estrella, echemos un vistazo en contexto y lo que significan.

96
00:06:52,910 --> 00:06:59,990
‫Entonces, cuando los usamos, cuando los usamos en una expresión, aquí hay algunos ejemplos de código.

97
00:06:59,990 --> 00:07:03,560
‫Es posible que vea la estrella antes de una variable.

98
00:07:03,560 --> 00:07:06,140
‫Es posible que vea el ampersand antes de una variable.

99
00:07:06,530 --> 00:07:07,370
‫¿Qué significa esto?

100
00:07:08,240 --> 00:07:15,920
‫Bueno, con el símbolo de la estrella, la sintaxis de ponerlo antes de la variable significa que estamos obteniendo

101
00:07:16,280 --> 00:07:20,900
‫el contenido en el puntero del actor ahora con el ampersand.

102
00:07:20,930 --> 00:07:25,880
‫Si coloca el ampersand delante de una variable o delante de una referencia a una variable, está

103
00:07:25,880 --> 00:07:28,880
‫diciendo que está obteniendo la dirección de esa variable.

104
00:07:28,880 --> 00:07:32,450
‫Es obtener la dirección del actor o la dirección a la que apunta la referencia.

105
00:07:32,780 --> 00:07:37,550
‫Ahora, cuando estamos declarando que lo estamos usando, termine el tipo de una variable.

106
00:07:37,760 --> 00:07:41,150
‫Las estrellas y el ampersand tienen significados casi opuestos.

107
00:07:41,570 --> 00:07:51,050
‫Entonces, la estrella significa que este es un indicador de un nuevo actor y el ampersand significa que es una referencia a

108
00:07:51,050 --> 00:07:52,370
‫tu actor.

109
00:07:52,640 --> 00:07:57,350
‫Así que recuerde que hay un conjunto de significados completamente diferente, ya sea que los

110
00:07:57,350 --> 00:08:03,320
‫esté usando con una variable en una expresión, o si los está usando en el tipo que declara una variable.

111
00:08:03,560 --> 00:08:08,270
‫Ahora, no entraré en demasiados detalles, pero para colmo de males, estos pueden tener otros

112
00:08:08,270 --> 00:08:08,750
‫significados.

113
00:08:08,750 --> 00:08:15,140
‫En otro contexto, el ampersand puede significar un poco sabio y la estrella, como ya hemos visto, se puede

114
00:08:15,140 --> 00:08:17,780
‫usar con cadenas en el registro U.

115
00:08:18,050 --> 00:08:22,550
‫Así que estos no son necesariamente todos los significados de estos dos símbolos, pero son

116
00:08:22,550 --> 00:08:26,360
‫prácticamente todos los significados importantes que se refieren a punteros y referencias.

117
00:08:26,660 --> 00:08:27,290
‫Buena cosa.

118
00:08:27,290 --> 00:08:32,300
‫Así que hemos aprendido sobre punteros, referencias, cómo se relacionan entre sí, en qué se diferencian y

119
00:08:32,540 --> 00:08:34,400
‫por qué podríamos querer usarlos.

120
00:08:34,430 --> 00:08:35,900
‫Te veré en la próxima conferencia.

