﻿1
00:00:04,410 --> 00:00:05,340
‫Hallo en welkom.

2
00:00:05,340 --> 00:00:10,290
‫In deze lezing gaan we iets leren over een vreemd fenomeen dat een buitenste parameter wordt genoemd.

3
00:00:10,290 --> 00:00:17,400
‫Dit is een parameter die in plaats van de waarde in C++ door te geven, we de neiging hebben om de waarde uit een functie door

4
00:00:17,400 --> 00:00:18,000
‫te geven.

5
00:00:18,450 --> 00:00:23,340
‫En we gaan ook zien over iets dat een constante referentie wordt genoemd en hoe deze

6
00:00:23,340 --> 00:00:25,380
‫twee concepten met elkaar verweven zijn.

7
00:00:25,740 --> 00:00:27,720
‫Laten we erin duiken en dit uitzoeken.

8
00:00:28,880 --> 00:00:29,150
‫Nutsvoorzieningen.

9
00:00:29,150 --> 00:00:36,890
‫De echte plaats waar verwijzingen naar schijnen is in parameters naar functies, want elke keer

10
00:00:36,890 --> 00:00:45,740
‫dat we een float-delta-tijd zoals deze in onze component maken, nemen we een kopie van die originele float

11
00:00:45,740 --> 00:00:49,520
‫en geven deze door aan de functie.

12
00:00:49,520 --> 00:00:55,760
‫Dus in plaats van dat te doen, willen we er misschien een verwijzing naar nemen en dat doorgeven.

13
00:00:56,240 --> 00:01:02,660
‫Dus laten we ons voorstellen dat we een functie zouden creëren in grab it, elk genaamd print damage.

14
00:01:03,140 --> 00:01:09,200
‫En als argument voor deze functie willen we een float-schade doorgeven.

15
00:01:09,470 --> 00:01:14,720
‫Dit gaat, zoals ik al zei, een kopie maken van alles wat we doorgeven en het naar die variabele kopiëren.

16
00:01:14,720 --> 00:01:18,740
‫Maak deze parametervariabele in de functie voor afdrukschade.

17
00:01:19,930 --> 00:01:24,370
‫En we moeten hier ook een geretourneerde waarde van void hebben om het te voltooien en een puntkomma aan het einde.

18
00:01:24,730 --> 00:01:28,590
‫Laten we naar de C++ gaan en dit gesprek voortzetten.

19
00:01:28,600 --> 00:01:30,790
‫Laten we hier de afdrukschade maken.

20
00:01:31,390 --> 00:01:39,250
‫Zet de you grab een class ervoor en laten we wat accolades plaatsen in plaats van de puntkomma.

21
00:01:39,820 --> 00:01:48,280
‫Dus we hebben een kopie in de variabele schadeparameter en het is veilig, want als ik schade zou

22
00:01:48,280 --> 00:01:53,950
‫doen gelijk aan vijf, verander ik deze variabele hier alleen binnen printschade.

23
00:01:53,950 --> 00:01:55,390
‫Ik heb er zelf een kopie van.

24
00:01:55,630 --> 00:01:57,910
‫Ik kan het niet per ongeluk verpesten.

25
00:01:58,180 --> 00:02:01,400
‫Wat als ik geen kopie wil maken?

26
00:02:01,420 --> 00:02:04,330
‫Mijn alternatief zou zijn om een referentie te nemen.

27
00:02:04,630 --> 00:02:10,780
‫Dus wat ik hier kan doen, is dat ik een float-referentie in drukschade kan plaatsen, en ik

28
00:02:10,780 --> 00:02:14,260
‫moet die ook bijwerken in het C ++ -bestand.

29
00:02:14,740 --> 00:02:20,230
‫En dan heb ik misschien dit logbericht dat we de referentie gebruiken voor laten we gaan en

30
00:02:20,470 --> 00:02:22,540
‫dit opschrijven en in drukschade zetten.

31
00:02:22,750 --> 00:02:29,200
‫Dus nu nemen we onze schade en we printen het outlet-updates, de logboekverklaringen zeggen: schade is dit geval van

32
00:02:29,470 --> 00:02:30,940
‫schade, is dit schade.

33
00:02:31,300 --> 00:02:40,060
‫En wat we in onze tick-component kunnen doen, is dat we schade kunnen afdrukken en de schadevariabele kunnen doorgeven en een puntkomma aan het

34
00:02:40,060 --> 00:02:41,230
‫einde kunnen plaatsen.

35
00:02:41,590 --> 00:02:48,670
‫En we kunnen onze schadereferentie voorlopig wegwerken, want wat we nu aan de hand hebben is een beschadigde vlotter

36
00:02:48,670 --> 00:02:51,010
‫die in tech is gemaakt.

37
00:02:51,010 --> 00:03:00,100
‫Het geheugen hiervoor is hier in take aangemaakt en dan gaan we het aan deze print damage functie geven.

38
00:03:00,100 --> 00:03:06,640
‫Maar omdat de parameter een referentie is, kopiëren we deze schade niet echt.

39
00:03:06,640 --> 00:03:13,300
‫We nemen het adres en slaan dat op in de referentie, zodat wanneer we deze referentie

40
00:03:13,300 --> 00:03:18,130
‫verder gebruiken, we feitelijk toegang hebben tot het originele stuk geheugen.

41
00:03:18,130 --> 00:03:21,930
‫Er hoefde dus geen kopie te gebeuren om de schade af te drukken.

42
00:03:21,940 --> 00:03:25,240
‫Laten we nu eens kijken of dit echt doet wat we ervan verwachten.

43
00:03:25,240 --> 00:03:34,000
‫Als ik de schadewaarde verander in bijvoorbeeld vijf en dan opnieuw compileer en op play druk, ga dan eens kijken naar

44
00:03:34,000 --> 00:03:38,410
‫het uitvoerlogboek en de afdruk dat de schade vijf is.

45
00:03:38,560 --> 00:03:42,880
‫Maar omdat we een referentie hebben, weten we dat we die waarde kunnen bijwerken.

46
00:03:42,880 --> 00:03:48,880
‫Dus wat ik kan doen is dat ik binnen deze functie zou kunnen zeggen dat ik zou kunnen doen, hey, schade zou gelijk moeten zijn aan

47
00:03:48,940 --> 00:03:49,750
‫twee zoals zo.

48
00:03:50,320 --> 00:03:55,300
‫En als ik niet voorzichtig was, als ik dacht dat ik mijn eigen exemplaar had, zou ik misschien denken dat dat oké is.

49
00:03:55,630 --> 00:04:01,540
‫Maar eigenlijk hebben we in de tick-component de oorspronkelijke A-variabelen gewijzigd.

50
00:04:01,560 --> 00:04:09,580
‫Als ik hier een kleine log in doe om die originele schadevariabele te inspecteren en we zetten een procent F en geven

51
00:04:09,580 --> 00:04:15,670
‫de schade hier door, laten we coderen en dat compileren en we gaan op play drukken.

52
00:04:15,910 --> 00:04:21,850
‫Kijk eens in onze output log en je kunt zien dat nu de schade en de originele schade

53
00:04:21,850 --> 00:04:22,960
‫beide zijn aangepast.

54
00:04:22,960 --> 00:04:27,400
‫Ze zijn allebei veranderd in de nummer twee, wat niet geweldig is.

55
00:04:27,430 --> 00:04:33,100
‫Weet je, je zou per ongeluk veel schade kunnen aanrichten, als je de woordspeling wilt excuseren, door variabelen te veranderen waarvan

56
00:04:33,100 --> 00:04:35,500
‫je niet had verwacht dat ze zouden veranderen.

57
00:04:36,010 --> 00:04:41,170
‫En hier komt nog een gebruik van dat const-sleutelwoord dat we in het verleden hebben gezien.

58
00:04:41,620 --> 00:04:49,570
‫Als ik const voor mijn float-referentie plak, dan zeg ik hier dat dit een referentie moet zijn

59
00:04:49,570 --> 00:04:52,510
‫die je niet kunt veranderen.

60
00:04:52,510 --> 00:04:56,290
‫Je kunt er geen contactloze functies op aanroepen, je kunt hem niet instellen.

61
00:04:56,500 --> 00:05:00,370
‫U kunt de inhoud van deze variabele op geen enkele manier wijzigen.

62
00:05:00,370 --> 00:05:04,360
‫Je kunt het alleen gebruiken, je kunt het alleen lezen, je kunt alleen zien wat erin staat.

63
00:05:04,450 --> 00:05:10,540
‫Dus als we teruggaan naar ik pak een kopie, we moeten ervoor zorgen dat we Const hier ook in

64
00:05:10,540 --> 00:05:17,170
‫de parameters plaatsen en we kunnen doorgaan en compileren en je ziet dat we een build-fout krijgen en de fout

65
00:05:17,170 --> 00:05:21,850
‫zegt dat schade niet kan worden toegewezen omdat het een constante variabele is.

66
00:05:22,270 --> 00:05:25,000
‫Dus dat geeft ons de bescherming die we nodig hebben.

67
00:05:25,390 --> 00:05:32,890
‫Dus in het algemeen, als we proberen een variabele door te geven, op een efficiënte manier waar we geen kopie

68
00:05:32,890 --> 00:05:38,770
‫willen maken, dan zullen we altijd, altijd het contact trefwoord gebruiken en ook een referentie

69
00:05:39,010 --> 00:05:43,630
‫gebruiken, omdat dit ons verhindert om die inhoud per ongeluk wijzigen.

70
00:05:44,290 --> 00:05:50,350
‫Nu wil je het echter soms gebruiken om die waarde te wijzigen.

71
00:05:50,680 --> 00:05:58,750
‫En wat we als voorbeeld zouden kunnen hebben, we kunnen een Booleaanse retourwaarde hebben en we zouden kunnen zeggen dat er

72
00:05:58,750 --> 00:06:06,580
‫schade is, maar we kunnen ook, zoals we in het verleden in Blueprint hebben gedaan, een tweede retourwaarde willen hebben.

73
00:06:06,580 --> 00:06:10,640
‫Dus we zouden kunnen zeggen: hebben we schade en wat is die schade?

74
00:06:10,780 --> 00:06:19,060
‫Welnu, in dit geval is het eigenlijk logisch om een eenvoudige contactloze referentie te gebruiken, een zwevende referentie.

75
00:06:19,530 --> 00:06:26,580
‫De schade, en normaal gesproken zouden we dit eigenlijk schade noemen om het echt zichtbaar te maken

76
00:06:26,580 --> 00:06:29,280
‫dat dit een zogenaamde out-parameter is.

77
00:06:29,310 --> 00:06:31,110
‫Het is geen parameter om dingen door te geven.

78
00:06:31,140 --> 00:06:33,360
‫Het is een parameter om dingen door te geven.

79
00:06:33,630 --> 00:06:38,190
‫Nu kan het een beetje een rare gril van C++ zijn en het kan moeilijk te herkennen zijn.

80
00:06:38,490 --> 00:06:44,250
‫Maar over het algemeen, als je parameters ziet die een referentie zijn maar niet

81
00:06:44,520 --> 00:06:50,700
‫zijn gemarkeerd als contact, dan kun je vrijwel aannemen dat iemand die als een out-parameter wilde gebruiken.

82
00:06:51,090 --> 00:06:52,530
‫Dus dat is wat we hier hebben.

83
00:06:52,530 --> 00:06:53,750
‫We hebben schade.

84
00:06:53,760 --> 00:07:01,380
‫En als we dit zouden gaan implementeren in de CPP, dan kunnen we de 'you grab a class' hier vooraan

85
00:07:01,380 --> 00:07:05,700
‫zetten en we kunnen onze accolades hier tussen haakjes plaatsen.

86
00:07:06,120 --> 00:07:10,620
‫We gaan commentaar geven op de regel afdrukschade waar het niet blij mee is, omdat we proberen

87
00:07:10,620 --> 00:07:12,170
‫een contactreferentie in te stellen.

88
00:07:12,780 --> 00:07:19,680
‫En wat we hier in wezen kunnen doen, is dat we wat code kunnen doen, we kunnen zien of we schade hebben

89
00:07:19,680 --> 00:07:22,170
‫en dan zouden we afdrukken, ja, oké.

90
00:07:22,200 --> 00:07:25,430
‫Out schade is gelijk aan vijf.

91
00:07:25,440 --> 00:07:29,610
‫Dus dat is de schade die is aangericht en we kunnen terugkeren.

92
00:07:29,760 --> 00:07:36,480
‫Dat is waar, want we hebben wat schade aangericht en dit kunnen we nu gebruiken in ergens als

93
00:07:36,510 --> 00:07:39,870
‫TEC-componenten om de schade te pakken te krijgen.

94
00:07:40,470 --> 00:07:46,020
‫Dus hier in plaats van de schade vijf in te stellen, kunnen we de schade krijgen en deze

95
00:07:46,020 --> 00:07:53,790
‫afdrukken als er enige schade is, zodat we iets in deze trant kunnen zeggen als er schade is en dan geven we de variabele door

96
00:07:53,790 --> 00:07:56,490
‫die we willen vullen met de schade .

97
00:07:56,760 --> 00:08:04,980
‫Dus schade bijvoorbeeld, en dan kunnen wij de body van onze opgave hebben en zouden wij bijvoorbeeld alleen printschade kunnen

98
00:08:04,980 --> 00:08:11,700
‫noemen, als er schade is te tonen en wij deze kunnen verwijderen, logt u geheel in.

99
00:08:12,150 --> 00:08:19,320
‫Dit is dus de manier waarop we contactloze referenties gebruiken als out-parameters, een manier om meerdere retourwaarden uit

100
00:08:19,320 --> 00:08:21,240
‫een functie te halen.

101
00:08:21,540 --> 00:08:27,450
‫En typisch wanneer we dit doen, wanneer we deze functie aanroepen, zullen we de variabele creëren, maar we zullen

102
00:08:27,450 --> 00:08:29,640
‫er geen initiële waarde aan geven.

103
00:08:29,940 --> 00:08:34,260
‫Dus op regel 39 heb ik eigenlijk een vlotterschade gedefinieerd.

104
00:08:34,560 --> 00:08:36,990
‫Ik geef het meteen door in de volgende regel.

105
00:08:36,990 --> 00:08:41,590
‫En dit is een ander veelbetekenend teken dat u een out-parameter gebruikt.

106
00:08:42,120 --> 00:08:48,390
‫Ik heb geen waarde gegeven voordat ik het in een functie heb doorgegeven, wat betekent dat ik verwacht

107
00:08:48,390 --> 00:08:51,390
‫dat die functie de waarde voor mij invoert.

108
00:08:51,690 --> 00:08:55,350
‫Dus dit kan in het begin moeilijk te herkennen zijn en het kan een beetje verwarrend zijn.

109
00:08:55,560 --> 00:08:58,200
‫Maar dit zijn de twee regels waarvan ik wil dat je ze onthoudt.

110
00:08:58,200 --> 00:09:04,290
‫Als je een variabele ziet die gedeclareerd is en geen waarde heeft gekregen en onmiddellijk wordt doorgegeven aan een functie, vraag jezelf dan af

111
00:09:04,380 --> 00:09:05,880
‫of dat een out-parameter is.

112
00:09:05,880 --> 00:09:12,390
‫En de andere regel is dat als je een referentie als parameter ziet, maar het is geen content, dat ook

113
00:09:12,390 --> 00:09:15,420
‫een hint kan zijn dat dit een out-parameter is.

114
00:09:15,720 --> 00:09:21,780
‫En natuurlijk, als de variabele of parameter ergens een naam heeft, dan is dat een dode weggeefactie dat dit

115
00:09:21,780 --> 00:09:23,940
‫ding bedoeld is als een out-parameter.

116
00:09:24,360 --> 00:09:24,890
‫Goed spul.

117
00:09:24,900 --> 00:09:28,850
‫Ik denk dat dat ons heel goed heeft voorbereid om een sweep te kunnen doen.

118
00:09:28,860 --> 00:09:30,750
‫Dus ik zie je in de volgende lezing.

