Medlemmer vs metode argumenter tilgang til i C ++

stemmer
3

Kan jeg ha en metode som tar argumenter som er betegnet med de samme navnene som medlemmer av driftsenheten klasse? Jeg prøvde å bruke denne:

    class Foo {
        public:
            int x, y;
            void set_values(int x, int y)
            {
                x = x;
                y = y;
            };
    };

... men det ser ikke ut til å fungere.

Er det noen måte å få tilgang til forekomsten navnerommet som jeg jobber i, som ligner på Javascript s thiseller Pythons self?

Publisert på 19/05/2009 klokken 21:35
kilden bruker
På andre språk...                            


3 svar

stemmer
6

Ja, du bør være i stand til å skrive dette ved hjelp av "dette" søkeord (som er en peker i C ++):

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        }
}
Svarte 19/05/2009 kl. 21:36
kilden bruker

stemmer
1

I C++det aktuelle tilfellet er referert av constpekeren this.

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        };
};
Svarte 19/05/2009 kl. 21:37
kilden bruker

stemmer
14

Det er vanligvis en god idé å unngå denne typen forvirring ved å bruke en navnekonvensjon for medlemsvariablene. For eksempel er camelCaseWithUnderScore_ ganske vanlig. På den måten ville ende opp med x_ = x;, som fortsatt er litt morsomt å lese høyt, men er ganske entydig på skjermen.

Hvis du absolutt må ha variabler og argumenter som heter det samme, så kan du bruke thispekeren å være konkret:

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        }
};

Forresten, merk følgende semikolon på klassen definisjonen - som er nødvendig for å kompilere vellykket.

Svarte 19/05/2009 kl. 21:39
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more