‫Hallo en welkom.
‫In deze lezing gaan we leren over referenties en alternatieven voor verwijzingen, en we gaan zien waarom ze anders
‫zijn, waarom we ze misschien willen gebruiken.
‫Laten we erin duiken en zien.
‫Dus naast verwijzingen is er een zeer vergelijkbaar verwant concept dat een referentie wordt genoemd.
‫Nu zijn zowel aanwijzers als verwijzingen in wezen slechts een geheugenadres.
‫Ze slaan allebei een verwijzing op naar waar een andere variabele kan worden gevonden, en op deze manier lijken ze ongelooflijk veel op
‫elkaar.
‫Het verschil tussen de twee komt er in feite op neer of ze opnieuw kunnen worden toegewezen.
‫Kunnen ze in principe naar een ander adres verwijzen nadat ze voor het eerst zijn gemaakt?
‫In het geval van een aanwijzer is dat antwoord ja.
‫Je kunt een aanwijzer veranderen om naar een nieuw geheugenadres, een nieuwe actor, een nieuwe component te wijzen wanneer je maar wilt,
‫zolang het maar het juiste type heeft.
‫Een verwijzing daarentegen kan maar één keer worden ingesteld wanneer u deze voor het eerst maakt om naar een andere variabele te
‫verwijzen.
‫Het kan dan niet meer worden gewijzigd.
‫En dit is een veiligheidsfunctie omdat het opnieuw toewijzen van variabelen kan leiden tot problemen waarbij die
‫variabelen kunnen verdwijnen of waar u die aanwijzer op null zet.
‫Een null-aanwijzer is in wezen een aanwijzer die naar niets wijst en proberen dingen te doen met een punt dat op
‫niets staat, kan je engine echt laten crashen, wat geen ideaal resultaat is met verwijzingen, omdat je ze een waarde moet geven wanneer
‫je voor het eerst maakt hen.
‫Ze kunnen niet null zijn, dus u kunt deze null-aanwijzer-crashes niet krijgen.
‫Dus laten we eens kijken naar enkele van de betrokken syntaxis.
‫Dus wanneer u inhoud opent met een aanwijzer, moet u een speciale syntaxis gebruiken.
‫Je moet deze ster voor de aanwijzer plaatsen om er zeker van te zijn dat je de
‫waarde in de aanwijzer krijgt, niet het geheugenadres met verwijzingen, omdat je het geheugenadres nooit echt nodig hebt.
‫Je kunt de variabele gewoon gebruiken alsof het de variabele is waarnaar hij verwijst.
‫U hoeft geen speciale syntaxis te gebruiken.
‫Nu is er toegang tot het adres, dus met pointers krijg je het adres automatisch te pakken.
‫Wanneer u de variabele met een verwijzing gebruikt, moet u een speciale syntaxis gebruiken.
‫Om dat te doen, moet je het adres van de operator gebruiken en je krijgt in principe hetzelfde
‫adres als de originele variabele.
‫En dan is er nog het adres wijzigen met een aanwijzer.
‫We hebben gezien dat je het adres kunt toewijzen en het adres van opereert om dat met verwijzingen te doen.
‫Dit is niet toegestaan, dus er is geen syntaxis voor.
‫En tot slot, wat als we de waarde willen wijzigen waarnaar we verwijzen, niet het adres, maar de werkelijke
‫waarde die op dat adres wordt opgeslagen?
‫Nou, met de aanwijzingen, je moet opnieuw een speciale syntaxis gebruiken.
‫Je moet die ster plaatsen en dan iets toewijzen.
‫Dus de actor-pointer die je weer toewijst aan de star-acteur-pointer met verwijzingen, omdat je het eigenlijke adres niet kunt
‫veranderen, heb je geen extra syntaxis nodig.
‫We kunnen de extra syntaxis laten vallen en alleen de actor-referentie gelijk hebben aan.
‫Actor betekent dat u de waarde op de aangewezen locatie overschrijft.
‫Dus dat is allemaal een beetje theoretisch.
‫Laten we een echt voorbeeld nemen.
‫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,
‫wordt de huidige schade op nul gezet.
‫Niemand heeft ons schade berokkend.
‫Nu willen we hier misschien een verwijzing naar maken, in plaats van rond te kopiëren, willen we het misschien
‫doorgeven aan een functie, maar zonder het daadwerkelijk te veranderen.
‫De manier waarop we dit kunnen doen, is door een float te hebben en dan het ampersand na de float te plaatsen.
‫En het ampersand zegt dat dit een verwijzing is naar een vlotter.
‫Het is zelf geen nieuwe float, wijst geen float-geheugen toe.
‫Het wijst alleen pointer-geheugen toe.
‫En dus kunnen we dit de beschadigde ref noemen en we kunnen het gelijk stellen aan schade.
‫We hoeven niet het adres van te nemen of iets dergelijks te doen.
‫Het weet automatisch, nou ja, dit is een referentie en dit is een variabele.
‫Dus wat u hier probeert te doen, is een verwijzing naar die variabele instellen.
‫En ja hoor, als we gaan en jij logt, dan kunnen we dit afdrukken alsof het gewoon een
‫gewone float is, dus we kunnen schade dubbele punt zeggen en dan procent F en dan kunnen we hier gewoon een afdrukschade aanrichten.
‫Ref We hebben geen speciale syntaxis nodig.
‫We kunnen het net als een gewone variabele gebruiken.
‫Laten we doorgaan en op play drukken na het compileren, kijk eens naar ons outputlogboek en ja hoor, de schade
‫komt uit op nul, wat de waarde was die we hadden ingesteld.
‫Maar dat bewijst niet noodzakelijkerwijs dat ik geen kopie van die originele variabele heb gemaakt, dus ik zou je willen
‫uitdagen om te proberen de waarde te veranderen en te kijken wat er gebeurt.
‫Dus gebruik de referentie, de referentie naar schade, om een nieuwe waarde in te stellen en print dan de
‫originele waarde uit zodat de originele waarde naast de referentiewaarde staat en kijk eens naar zijn ze hetzelfde of zijn ze
‫verschillend?
‫U wijzigt alleen de referentie, maar verandert dit ook het origineel?
‫Omdat dat zou betekenen dat ze allebei dezelfde variabele pauzevideo zijn en het proberen.
‫Oké.
‫Welkom terug.
‫Laten we dit dus eens proberen.
‫Dus om de referentie nu te veranderen, gaan we schade ref gelijk aan doen.
‫En deze keer ga ik zeggen wat we vijf schade hebben aangericht en dat is dat ik hier geen speciale syntaxis heb hoeven
‫gebruiken.
‫Het verwijst de referentie niet opnieuw omdat we deze al hebben gedeclareerd en de referentie op die eerste regel hebben
‫ingesteld wanneer deze wordt gemaakt.
‫We kunnen het niet nog een keer doen.
‫Dus nu kunnen we gewoon de waarde instellen.
‫Dus wat ik nu kan doen, is dat de schadescheidsrechter hier in het logboek staat.
‫Laten we ook een schade en procent f op diezelfde string zetten en dan de schade hier ook doorgeven.
‫En dan gaan we compileren en kijken.
‫Laten we op play drukken, naar ons uitvoerlogboek gaan en ja hoor, het drukt schaderef en schade af omdat beide de nieuwe
‫waarde hebben dat we de waarde van vijf hebben ingesteld.
‫Dus in wezen hebben we hier twee variabelen die naar hetzelfde stuk geheugen verwijzen.
‫Je zou bijna kunnen zeggen dat het allemaal dezelfde variabele is, maar met verschillende namen.
‫Dit heeft dus het voordeel dat er geen kopie nodig is, net als een aanwijzer, maar het heeft ook veel meer voordelen omdat
‫het zo veel gemakkelijker te gebruiken is.
‫We hebben al die extra syntaxis niet nodig en het is ook veiliger om te gebruiken.
‫Dus zolang we niets opnieuw hoeven te schilderen, verdient het gebruik van referenties over het algemeen de voorkeur.
‫Laten we nu een kort overzicht geven van enkele van de symbolen die we hier gebruiken, omdat ze een beetje verwarrend kunnen zijn.
‫Ze worden veel gebruikt in C++.
‫Dus de ampersand en de stersymbolen, laten we ze in context bekijken en wat ze betekenen.
‫Dus als we ze gebruiken, dus als we ze in een uitdrukking gebruiken, zijn hier enkele codevoorbeelden.
‫Mogelijk ziet u de ster vóór een variabele.
‫Mogelijk ziet u de ampersand vóór een variabele.
‫Wat betekent dit?
‫Welnu, met het stersymbool, de syntaxis om het voor de variabele te plaatsen, betekent dat we de
‫inhoud nu op de acteursaanwijzer krijgen met het ampersand.
‫Als je het ampersand voor een variabele of voor een verwijzing naar een variabele plaatst, zegt
‫het dat het het adres van die variabele krijgt.
‫Het krijgt het adres van de acteur of het adres waarnaar wordt verwezen door de referentie.
‫Als we nu declareren, gebruiken we het om het type variabele te beëindigen.
‫De sterren en de ampersand hebben bijna de tegenovergestelde betekenissen.
‫Dus de ster betekent dat dit een verwijzing is naar een nieuwe acteur en het ampersand betekent dat dit een verwijzing is naar de
‫r u acteur.
‫Dus onthoud dit dat er een compleet andere set betekenissen is, of je ze
‫nu gebruikt met een variabele in een uitdrukking, of dat je ze gebruikt in het type dat een variabele declareert.
‫Nu, ik zal niet te veel in detail treden, maar om nog erger te maken, deze kunnen eigenlijk andere betekenissen
‫hebben.
‫In een andere context kan de ampersand een beetje wijs betekenen, en de ster, zoals we al hebben gezien, kan
‫worden gebruikt met strings in het U-logboek.
‫Dit zijn dus niet noodzakelijk alle betekenissen van deze twee symbolen, maar het
‫zijn vrijwel alle belangrijke betekenissen die verwijzen naar verwijzingen en verwijzingen.
‫Goed spul.
‫We hebben dus geleerd over verwijzingen, verwijzingen, hoe ze zich tot elkaar verhouden, hoe ze verschillen en
‫waarom we ze misschien willen gebruiken.
‫Ik zie je in de volgende lezing.