Membros vs argumentos método de acesso em C ++

votos
3

Posso ter um método que leva argumentos que são marcados com os mesmos nomes que os membros da classe exploração? Eu tentei usar o seguinte:

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

... mas não parecem funcionar.

Existe alguma maneira de acessar a instância do namespace do qual eu estou trabalhando, semelhante ao JavaScript do thisou Python self?

Publicado 19/05/2009 em 22:35
fonte usuário
Em outras línguas...                            


3 respostas

votos
14

É geralmente uma boa idéia para evitar esse tipo de confusão, usando uma convenção de nomenclatura para variáveis de membro. Por exemplo, camelCaseWithUnderScore_ é bastante comum. Dessa forma, você iria acabar com x_ = x;, o que ainda é um pouco engraçado ler em voz alta, mas é bastante inequívoca na tela.

Se você absolutamente necessário para ter as variáveis e argumentos chamado o mesmo, então você pode usar o thisponteiro para ser mais específico:

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

A propósito, observe o ponto e vírgula à direita na definição de classe - que é necessário para compilar com êxito.

Respondeu 19/05/2009 em 22:39
fonte usuário

votos
6

Sim, você deve ser capaz de escrever isso usando o "esta" palavra-chave (que é um ponteiro em C ++):

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        }
}
Respondeu 19/05/2009 em 22:36
fonte usuário

votos
1

Na C++instância corrente é referenciado pelo constponteiro this.

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        };
};
Respondeu 19/05/2009 em 22:37
fonte usuário

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