C ++ Operatører - Del 7 Innledning Dette er en del 7 av min serie, C ++ Operatører. I denne delen av serien ser vi på det som er kjent som peker til-medlem operatører. Det er to pekeren-til-medlem operatører. Jeg vil ikke forklare bare de peker-til-medlem operatører i denne artikkelen; Jeg vil forklare andre ting som går med det at du ikke kan være kjent med. Merk: Hvis du ikke kan se koden, eller hvis du tror noe mangler (ødelagt kobling, bilde fraværende), bare kontakte meg på [email protected]. Det er, kontakt meg for den minste problemet du har om hva du leser.
Forutsetning Du burde ha lest fra denne bloggen, artiklene, "C ++ Pekere", "C ++ Navnerom Basics" og "Pekere til klasser i C ++" eller liknende varer før du leser denne. Disse tre artiklene er blant de to seriene jeg har nevnt i tidligere deler av denne serien. Bindende Tenk deg at du har to klasser, A og B, og klasse A er en eiendom (objekt) i klasse B. Du instantiate et objekt fra B. Så du endre eiendommen gjenstand for B, som er av klasse A. Du kan deretter binde denne eiendommen til B til gjenstand for B slik at virkningene vil bli sett i en instansiert objekt av A.
Vi skal se eksempler nedenfor. Den binær operator. * La oss se på et eksempel som bruker. * Operatøren. Operatøren består av dot etterfulgt av stjernen. Vurdere følgende kode: # include bruker namespace std; class A {public: int propA; }; klasse B {public: En propB; }; A B :: * propBPtr = & B :: propB; int main () {B b; b.propB.propA = 9; A a = b * propBPtr.; domstol returnere 0; } To klasser, A og B er beskrevet. Klasse A har en egenskap, propA, som er av typen int. Klasse B har en egenskap, propB, som er av klasse A type. propB er en oppretting av klasse A.
Etter klassen B beskrivelsen i koden, har du setningen, AB :: * propBPtr = & B :: propB; Denne uttalelsen er en initialisering uttalelse. Pekeren-to-medlem operatør arbeider med en peker til propB i klasse B. Dette er en spesiell peker, fordi det er en peker til eiendommen i klassen beskrivelse og ikke til et startes objekt fra klassen. Oppmerksom på at eiendommen i klasse B vi snakker om her er av type A. klassen beskrivelse ligner på en navnebeskrivelse.
Så for å få tilgang til en eiendom av en klasse, må du omfanget operatør (: :) akkurat som du trenger det for å få tilgang til en identifikator i en navnebeskrivelse. La oss nå se på initialisering uttalelse: På høyre av den enkle oppdrag operatør har du en referanse (& B :: propB) til eiendommen i klasse B beskrivelse, som er av type A. Legg merke til bruken av omfanget operatør der. På venstre har du pekeren erklæring av denne eiendommen som er i klasse B beskrivelse og pekeren peker til en egenskap av type A.
Så pekeren erklæring begynner med A, så B for klasse B, omfanget operatør, deretter pekeren stjerne og pekeren; du kan gi det navnet du ønsker for pekeren. Denne uttalelsen er et spesielt peker initialisering. Nå la oss se på hva som er i den viktigste funksjonen. I hoved et objekt av B, kalles b, er instansiert. Eiendommen er propB av objektet b deretter åpnes. Denne eiendommen er av type A. Målet med denne tilgangen er å gi en verdi til int eiendommen av eiendommen i b. Så det er propA av objektet, propB av gjenstanden b som faktisk er i bruk.
Så du begynner med b, deretter et punktum, så propB, deretter et punktum og deretter propA. Vel, du må da tildelingen av en int, som i dette tilfellet er 9. Den neste setningen bruker pekeren-to-medlem operatør. Det binder propB bruker sin pekeren til eiendommen i klasse B beskrivelse. Pekeren er den andre operanden i. * Operatøren og objektet b er den første operanden av operatøren. Resultatet (eller returverdi) av denne bindingen er et objekt av type A.
Resultatet tilordnes (kopiert) til et instansiert objekt av type A i koden; Dette objektet kalles, en Her er sitater fra C ++ spesifikasjonen om binding operatør, (. *). "The binær operator. * Binder dens andre operand, som skal være av typen" peker til medlem av T "(hvor T er en helt definert klasse type) til sin første operand, som skal være av klasse T. Resultatet er en Formålet med den type som er angitt ved den andre operanden. ". Nå den neste setningen viser verdien av int-egenskapen til en.
Denne verdien er 9, som ble tildelt til int eiendom gjenstand for type A som eies av klasse B beskrivelse. På grunn av binding, den nye objektet instansieres, a, har verdien i sin egenskap. Den binære operatør -> * Denne operatøren begynner med -> symbol etterfulgt av *. Hensikten med denne pekeren til medlem operatør er den samme som for den tidligere operatøren, men dens første operand er en peker til b objektet, og ikke den b objektidentifikatoren.
Følgende kode viser hvordan du bruker det: # include bruker namespace std; class A {public: int propA; }; klasse B {public: En propB; }; A B :: * propBPtr = & B :: propB; int main () {B * bPtr; bPtr-> propB.propA = 9; A a = bPtr -> * propBPtr; domstol returnere 0; } I koden ovenfor, oppstilling for pekeren-to-medlem operatør er, A a = bPtr -> * propBPtr; Peker-til-medlem operatører operere fra venstre til høyre. Du har to av dem, som er * og -.>