﻿1
00:00:04,370 --> 00:00:05,510
‫Hallo en welkom.

2
00:00:05,510 --> 00:00:12,020
‫In deze lezing gaan we leren over referenties en alternatieven voor verwijzingen, en we gaan zien waarom ze anders

3
00:00:12,020 --> 00:00:14,600
‫zijn, waarom we ze misschien willen gebruiken.

4
00:00:14,870 --> 00:00:16,100
‫Laten we erin duiken en zien.

5
00:00:17,280 --> 00:00:22,980
‫Dus naast verwijzingen is er een zeer vergelijkbaar verwant concept dat een referentie wordt genoemd.

6
00:00:23,340 --> 00:00:28,920
‫Nu zijn zowel aanwijzers als verwijzingen in wezen slechts een geheugenadres.

7
00:00:28,930 --> 00:00:36,420
‫Ze slaan allebei een verwijzing op naar waar een andere variabele kan worden gevonden, en op deze manier lijken ze ongelooflijk veel op

8
00:00:36,420 --> 00:00:37,020
‫elkaar.

9
00:00:37,260 --> 00:00:43,080
‫Het verschil tussen de twee komt er in feite op neer of ze opnieuw kunnen worden toegewezen.

10
00:00:43,090 --> 00:00:48,420
‫Kunnen ze in principe naar een ander adres verwijzen nadat ze voor het eerst zijn gemaakt?

11
00:00:48,780 --> 00:00:51,270
‫In het geval van een aanwijzer is dat antwoord ja.

12
00:00:51,630 --> 00:00:57,600
‫Je kunt een aanwijzer veranderen om naar een nieuw geheugenadres, een nieuwe actor, een nieuwe component te wijzen wanneer je maar wilt,

13
00:00:57,600 --> 00:00:59,610
‫zolang het maar het juiste type heeft.

14
00:01:00,180 --> 00:01:06,360
‫Een verwijzing daarentegen kan maar één keer worden ingesteld wanneer u deze voor het eerst maakt om naar een andere variabele te

15
00:01:06,360 --> 00:01:06,870
‫verwijzen.

16
00:01:07,200 --> 00:01:09,240
‫Het kan dan niet meer worden gewijzigd.

17
00:01:09,540 --> 00:01:16,230
‫En dit is een veiligheidsfunctie omdat het opnieuw toewijzen van variabelen kan leiden tot problemen waarbij die

18
00:01:16,230 --> 00:01:21,210
‫variabelen kunnen verdwijnen of waar u die aanwijzer op null zet.

19
00:01:21,480 --> 00:01:27,990
‫Een null-aanwijzer is in wezen een aanwijzer die naar niets wijst en proberen dingen te doen met een punt dat op

20
00:01:27,990 --> 00:01:35,010
‫niets staat, kan je engine echt laten crashen, wat geen ideaal resultaat is met verwijzingen, omdat je ze een waarde moet geven wanneer

21
00:01:35,010 --> 00:01:37,140
‫je voor het eerst maakt hen.

22
00:01:37,500 --> 00:01:41,490
‫Ze kunnen niet null zijn, dus u kunt deze null-aanwijzer-crashes niet krijgen.

23
00:01:42,030 --> 00:01:45,520
‫Dus laten we eens kijken naar enkele van de betrokken syntaxis.

24
00:01:45,720 --> 00:01:50,850
‫Dus wanneer u inhoud opent met een aanwijzer, moet u een speciale syntaxis gebruiken.

25
00:01:50,850 --> 00:01:55,860
‫Je moet deze ster voor de aanwijzer plaatsen om er zeker van te zijn dat je de

26
00:01:55,860 --> 00:02:01,050
‫waarde in de aanwijzer krijgt, niet het geheugenadres met verwijzingen, omdat je het geheugenadres nooit echt nodig hebt.

27
00:02:01,260 --> 00:02:06,200
‫Je kunt de variabele gewoon gebruiken alsof het de variabele is waarnaar hij verwijst.

28
00:02:06,210 --> 00:02:08,190
‫U hoeft geen speciale syntaxis te gebruiken.

29
00:02:08,910 --> 00:02:15,180
‫Nu is er toegang tot het adres, dus met pointers krijg je het adres automatisch te pakken.

30
00:02:15,480 --> 00:02:18,690
‫Wanneer u de variabele met een verwijzing gebruikt, moet u een speciale syntaxis gebruiken.

31
00:02:18,690 --> 00:02:24,450
‫Om dat te doen, moet je het adres van de operator gebruiken en je krijgt in principe hetzelfde

32
00:02:24,450 --> 00:02:26,430
‫adres als de originele variabele.

33
00:02:27,270 --> 00:02:30,690
‫En dan is er nog het adres wijzigen met een aanwijzer.

34
00:02:30,690 --> 00:02:35,790
‫We hebben gezien dat je het adres kunt toewijzen en het adres van opereert om dat met verwijzingen te doen.

35
00:02:35,800 --> 00:02:37,890
‫Dit is niet toegestaan, dus er is geen syntaxis voor.

36
00:02:38,100 --> 00:02:43,800
‫En tot slot, wat als we de waarde willen wijzigen waarnaar we verwijzen, niet het adres, maar de werkelijke

37
00:02:43,800 --> 00:02:45,960
‫waarde die op dat adres wordt opgeslagen?

38
00:02:46,350 --> 00:02:50,730
‫Nou, met de aanwijzingen, je moet opnieuw een speciale syntaxis gebruiken.

39
00:02:50,730 --> 00:02:53,220
‫Je moet die ster plaatsen en dan iets toewijzen.

40
00:02:53,220 --> 00:03:00,210
‫Dus de actor-pointer die je weer toewijst aan de star-acteur-pointer met verwijzingen, omdat je het eigenlijke adres niet kunt

41
00:03:00,210 --> 00:03:03,240
‫veranderen, heb je geen extra syntaxis nodig.

42
00:03:03,240 --> 00:03:07,170
‫We kunnen de extra syntaxis laten vallen en alleen de actor-referentie gelijk hebben aan.

43
00:03:07,170 --> 00:03:12,690
‫Actor betekent dat u de waarde op de aangewezen locatie overschrijft.

44
00:03:12,900 --> 00:03:14,220
‫Dus dat is allemaal een beetje theoretisch.

45
00:03:14,220 --> 00:03:16,170
‫Laten we een echt voorbeeld nemen.

46
00:03:16,170 --> 00:03:24,480
‫Dus als we een vlotter hadden die misschien de schade opsloeg die ons in het spel was aangericht en in die zin dat we de huidige schade opslaan,

47
00:03:24,480 --> 00:03:26,610
‫wordt de huidige schade op nul gezet.

48
00:03:26,610 --> 00:03:28,080
‫Niemand heeft ons schade berokkend.

49
00:03:28,500 --> 00:03:33,840
‫Nu willen we hier misschien een verwijzing naar maken, in plaats van rond te kopiëren, willen we het misschien

50
00:03:33,840 --> 00:03:36,690
‫doorgeven aan een functie, maar zonder het daadwerkelijk te veranderen.

51
00:03:37,110 --> 00:03:42,510
‫De manier waarop we dit kunnen doen, is door een float te hebben en dan het ampersand na de float te plaatsen.

52
00:03:42,750 --> 00:03:45,360
‫En het ampersand zegt dat dit een verwijzing is naar een vlotter.

53
00:03:45,360 --> 00:03:49,410
‫Het is zelf geen nieuwe float, wijst geen float-geheugen toe.

54
00:03:49,410 --> 00:03:51,150
‫Het wijst alleen pointer-geheugen toe.

55
00:03:51,630 --> 00:03:56,910
‫En dus kunnen we dit de beschadigde ref noemen en we kunnen het gelijk stellen aan schade.

56
00:03:56,910 --> 00:04:00,120
‫We hoeven niet het adres van te nemen of iets dergelijks te doen.

57
00:04:00,450 --> 00:04:04,470
‫Het weet automatisch, nou ja, dit is een referentie en dit is een variabele.

58
00:04:04,470 --> 00:04:08,550
‫Dus wat u hier probeert te doen, is een verwijzing naar die variabele instellen.

59
00:04:08,820 --> 00:04:15,840
‫En ja hoor, als we gaan en jij logt, dan kunnen we dit afdrukken alsof het gewoon een

60
00:04:15,840 --> 00:04:24,120
‫gewone float is, dus we kunnen schade dubbele punt zeggen en dan procent F en dan kunnen we hier gewoon een afdrukschade aanrichten.

61
00:04:24,120 --> 00:04:25,830
‫Ref We hebben geen speciale syntaxis nodig.

62
00:04:25,830 --> 00:04:28,230
‫We kunnen het net als een gewone variabele gebruiken.

63
00:04:28,440 --> 00:04:33,930
‫Laten we doorgaan en op play drukken na het compileren, kijk eens naar ons outputlogboek en ja hoor, de schade

64
00:04:33,930 --> 00:04:37,470
‫komt uit op nul, wat de waarde was die we hadden ingesteld.

65
00:04:37,740 --> 00:04:43,170
‫Maar dat bewijst niet noodzakelijkerwijs dat ik geen kopie van die originele variabele heb gemaakt, dus ik zou je willen

66
00:04:43,170 --> 00:04:46,980
‫uitdagen om te proberen de waarde te veranderen en te kijken wat er gebeurt.

67
00:04:46,980 --> 00:04:54,030
‫Dus gebruik de referentie, de referentie naar schade, om een nieuwe waarde in te stellen en print dan de

68
00:04:54,030 --> 00:05:01,260
‫originele waarde uit zodat de originele waarde naast de referentiewaarde staat en kijk eens naar zijn ze hetzelfde of zijn ze

69
00:05:01,260 --> 00:05:01,740
‫verschillend?

70
00:05:01,740 --> 00:05:05,160
‫U wijzigt alleen de referentie, maar verandert dit ook het origineel?

71
00:05:05,160 --> 00:05:10,560
‫Omdat dat zou betekenen dat ze allebei dezelfde variabele pauzevideo zijn en het proberen.

72
00:05:13,850 --> 00:05:14,360
‫Oké.

73
00:05:14,360 --> 00:05:15,060
‫Welkom terug.

74
00:05:15,080 --> 00:05:16,280
‫Laten we dit dus eens proberen.

75
00:05:16,730 --> 00:05:22,280
‫Dus om de referentie nu te veranderen, gaan we schade ref gelijk aan doen.

76
00:05:22,280 --> 00:05:27,290
‫En deze keer ga ik zeggen wat we vijf schade hebben aangericht en dat is dat ik hier geen speciale syntaxis heb hoeven

77
00:05:27,290 --> 00:05:27,580
‫gebruiken.

78
00:05:27,590 --> 00:05:33,080
‫Het verwijst de referentie niet opnieuw omdat we deze al hebben gedeclareerd en de referentie op die eerste regel hebben

79
00:05:33,080 --> 00:05:34,580
‫ingesteld wanneer deze wordt gemaakt.

80
00:05:34,820 --> 00:05:36,170
‫We kunnen het niet nog een keer doen.

81
00:05:36,320 --> 00:05:38,870
‫Dus nu kunnen we gewoon de waarde instellen.

82
00:05:39,470 --> 00:05:45,830
‫Dus wat ik nu kan doen, is dat de schadescheidsrechter hier in het logboek staat.

83
00:05:46,070 --> 00:05:56,510
‫Laten we ook een schade en procent f op diezelfde string zetten en dan de schade hier ook doorgeven.

84
00:05:57,650 --> 00:06:00,410
‫En dan gaan we compileren en kijken.

85
00:06:00,740 --> 00:06:08,480
‫Laten we op play drukken, naar ons uitvoerlogboek gaan en ja hoor, het drukt schaderef en schade af omdat beide de nieuwe

86
00:06:08,480 --> 00:06:12,200
‫waarde hebben dat we de waarde van vijf hebben ingesteld.

87
00:06:12,380 --> 00:06:18,650
‫Dus in wezen hebben we hier twee variabelen die naar hetzelfde stuk geheugen verwijzen.

88
00:06:18,650 --> 00:06:22,130
‫Je zou bijna kunnen zeggen dat het allemaal dezelfde variabele is, maar met verschillende namen.

89
00:06:22,430 --> 00:06:28,580
‫Dit heeft dus het voordeel dat er geen kopie nodig is, net als een aanwijzer, maar het heeft ook veel meer voordelen omdat

90
00:06:28,580 --> 00:06:30,710
‫het zo veel gemakkelijker te gebruiken is.

91
00:06:30,710 --> 00:06:33,650
‫We hebben al die extra syntaxis niet nodig en het is ook veiliger om te gebruiken.

92
00:06:33,650 --> 00:06:39,140
‫Dus zolang we niets opnieuw hoeven te schilderen, verdient het gebruik van referenties over het algemeen de voorkeur.

93
00:06:39,320 --> 00:06:44,780
‫Laten we nu een kort overzicht geven van enkele van de symbolen die we hier gebruiken, omdat ze een beetje verwarrend kunnen zijn.

94
00:06:44,780 --> 00:06:47,210
‫Ze worden veel gebruikt in C++.

95
00:06:47,210 --> 00:06:52,250
‫Dus de ampersand en de stersymbolen, laten we ze in context bekijken en wat ze betekenen.

96
00:06:52,910 --> 00:06:59,990
‫Dus als we ze gebruiken, dus als we ze in een uitdrukking gebruiken, zijn hier enkele codevoorbeelden.

97
00:06:59,990 --> 00:07:03,560
‫Mogelijk ziet u de ster vóór een variabele.

98
00:07:03,560 --> 00:07:06,140
‫Mogelijk ziet u de ampersand vóór een variabele.

99
00:07:06,530 --> 00:07:07,370
‫Wat betekent dit?

100
00:07:08,240 --> 00:07:15,920
‫Welnu, met het stersymbool, de syntaxis om het voor de variabele te plaatsen, betekent dat we de

101
00:07:16,280 --> 00:07:20,900
‫inhoud nu op de acteursaanwijzer krijgen met het ampersand.

102
00:07:20,930 --> 00:07:25,880
‫Als je het ampersand voor een variabele of voor een verwijzing naar een variabele plaatst, zegt

103
00:07:25,880 --> 00:07:28,880
‫het dat het het adres van die variabele krijgt.

104
00:07:28,880 --> 00:07:32,450
‫Het krijgt het adres van de acteur of het adres waarnaar wordt verwezen door de referentie.

105
00:07:32,780 --> 00:07:37,550
‫Als we nu declareren, gebruiken we het om het type variabele te beëindigen.

106
00:07:37,760 --> 00:07:41,150
‫De sterren en de ampersand hebben bijna de tegenovergestelde betekenissen.

107
00:07:41,570 --> 00:07:51,050
‫Dus de ster betekent dat dit een verwijzing is naar een nieuwe acteur en het ampersand betekent dat dit een verwijzing is naar de

108
00:07:51,050 --> 00:07:52,370
‫r u acteur.

109
00:07:52,640 --> 00:07:57,350
‫Dus onthoud dit dat er een compleet andere set betekenissen is, of je ze

110
00:07:57,350 --> 00:08:03,320
‫nu gebruikt met een variabele in een uitdrukking, of dat je ze gebruikt in het type dat een variabele declareert.

111
00:08:03,560 --> 00:08:08,270
‫Nu, ik zal niet te veel in detail treden, maar om nog erger te maken, deze kunnen eigenlijk andere betekenissen

112
00:08:08,270 --> 00:08:08,750
‫hebben.

113
00:08:08,750 --> 00:08:15,140
‫In een andere context kan de ampersand een beetje wijs betekenen, en de ster, zoals we al hebben gezien, kan

114
00:08:15,140 --> 00:08:17,780
‫worden gebruikt met strings in het U-logboek.

115
00:08:18,050 --> 00:08:22,550
‫Dit zijn dus niet noodzakelijk alle betekenissen van deze twee symbolen, maar het

116
00:08:22,550 --> 00:08:26,360
‫zijn vrijwel alle belangrijke betekenissen die verwijzen naar verwijzingen en verwijzingen.

117
00:08:26,660 --> 00:08:27,290
‫Goed spul.

118
00:08:27,290 --> 00:08:32,300
‫We hebben dus geleerd over verwijzingen, verwijzingen, hoe ze zich tot elkaar verhouden, hoe ze verschillen en

119
00:08:32,540 --> 00:08:34,400
‫waarom we ze misschien willen gebruiken.

120
00:08:34,430 --> 00:08:35,900
‫Ik zie je in de volgende lezing.

