C ++ Operatörer - Del 7 Inledning Detta är en del 7 av min serie, C ++ Operatörer. I denna del av serien, tittar vi på vad som är känt som pekare-till-medlem operatörer. Det finns två pekare-till-medlem operatörer. Jag kommer inte att förklara bara pekaren mot medlem aktörer i den här artikeln; Jag kommer att förklara andra saker som går med det som du kanske inte känner till. Obs: Om du inte kan se koden, eller om du tror att något saknas (bruten länk, bild frånvarande), bara att kontakta mig på [email protected].
Det vill säga, kontakta mig för minsta problem du har om vad du läser. Förutsättning Du bör ha läst från den här bloggen, artiklar, "C ++ pekare", "C ++ namnområden Basics" och "Pekare till klasser i C ++" eller liknande artiklar innan du läser detta. Dessa tre artiklar är bland de två serierna jag har nämnt i de tidigare delarna i denna serie. Bindande Tänk dig att du har två klasser, A och B, och klass A är en egenskap (objekt) av serie B. Du initiera ett objekt från B. Då du ändra egenskapen föremål för B, som är av klass A.
Du kan sedan binda denna egenskap hos B till föremålet för B så att effekterna kommer att synas i en exemplifierad föremål A. Vi får se exempel nedan. Den binär operator. * Låt oss titta på ett exempel som använder. * Operatören. Operatören utgörs av dot följt av asterisken. Tänk på följande kod: #include using namespace std; klass A {public: int propA; }; klass B {public: En propB; }; A B :: * propBPtr = & B :: propB; int main () {B b; b.propB.propA = 9; En a = b * propBPtr.; cout återvända 0; } Två klasser, A och B beskrivs. Klass A har en egenskap, propA, som är av typen int.
Klass B har en egenskap, propB som är av klass A-typ. propB är en exemplifiering av serie A. Efter klass B beskrivning i koden, har du ett uttalande, AB :: * propBPtr = & B :: propB; Detta uttalande är en initiering uttalande. Pekaren till medlem operatör arbetar med en pekare till propB i klass B. Detta är en speciell pekare, eftersom det är en pekare till fastigheten i klassbeskrivningen och inte ett instansierade objekt från klassen. Observera att fastigheten i klass B vi talar om här är av typen A. Klassen beskrivningen är liknar ett namnbeskrivning.
Så för att komma åt en egenskap hos en klass, måste du räckvidden operatören (: :) precis som du behöver den för att få tillgång till en identifierare i ett namnbeskrivning. Låt oss nu titta på initieringen uttalande: Till höger om den enkla tilldelningsoperatorn du har en referens (& B :: propB) till fastigheten i klass B beskrivning, som är av typen A. Observera användningen av omfattningen operatören det. Till vänster har pekaren deklarationen för den här egenskapen som är i klass B beskrivning och pekaren pekar på en egenskap av typ A.
Så pekaren deklarationen börjar med A, sedan B för klass B, omfattningen operatören, sedan pekare asterisk och pekaren; du kan ge vilket namn du vill ha för pekaren. Detta uttalande är en speciell pekare initiering. Låt oss nu titta på vad som finns i huvudfunktionen. I huvud Ett syfte med B, kallat b, instansieras. Fastigheten, propB av objektet B är sedan nås. Denna egenskap är av typ A. Syftet med denna tillgång är att ge ett värde till int egenskap av fastigheten i b. Så det är propA av objektet, propB av objektet B som faktiskt nås.
Så du börjar med b, då en punkt, då propB sedan en punkt och sedan propA. Tja, du sedan få tilldelning av en int, som i detta fall är 9. Nästa uttalande använder pekaren till medlem operatör. Det binder propB använder sin pekare till fastigheten i klass B beskrivningen. Pekaren är den andra operanden av. * Operatören och objektet b är den första operanden för operatören. Resultatet (eller returvärde) av denna bindning är ett objekt av typ A.
Resultatet är tilldelad (kopieras) till ett instansieras objekt av typen A i koden, detta objekt kallas, en Här är citat från C ++ specifikationen om bindnings operatör (. *). "The binär operator. * Binder sin andra operand, som skall vara av typen" pekare till medlem av T "(där T är en helt definierad klass typ) till dess första operand, som skall vara av klass T. Resultatet är en objekt av den typ som anges av den andra operanden. ". Nu nästa uttalande visar värdet av int egenskap hos en.
Detta värde är 9, som tilldelades int egenskap hos ett objekt av typen A som tillhör klass B beskrivningen. På grund av bindning, den nya instansieras objektet, en, har värdet på dess egendom. Den binär operator -> * Denna operatör börjar med -> symbolen följt av *. Syftet med denna pekare-till-medlem operatör är densamma som den hos den tidigare operatören, men dess första operanden är en pekare till b-objektet och inte b objektidentifierare.
Följande kod visar hur man använder det: #include using namespace std; klass A {public: int propA; }; klass B {public: En propB; }; A B :: * propBPtr = & B :: propB; int main () {B * bptr; bPtr-> propB.propA = 9; En a = bptr -> * propBPtr; cout återvända 0; } I ovanstående kod, ett uttalande för pekaren till medlem operatören, A a = bptr -> * propBPtr; Pekaren mot medlem aktörer verka från vänster till höger. Du har två av dem, som är * och -.>