Члены против доступа к аргументам метода в C ++ - PullRequest
3 голосов
/ 20 мая 2009

Могу ли я иметь метод, который принимает аргументы, которые обозначены теми же именами, что и члены класса удержания? Я пытался использовать это:

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

... но, похоже, это не работает.

Есть ли способ получить доступ к экземпляру, в пространстве имен которого я работаю, аналогично this в JavaScript или self?

в Python?

Ответы [ 3 ]

14 голосов
/ 20 мая 2009

Как правило, рекомендуется избегать такого рода путаницы, используя соглашение об именах для переменных-членов. Например, camelCaseWithUnderScore_ довольно часто встречается. Таким образом, вы получите x_ = x;, что по-прежнему немного забавно читать вслух, но на экране довольно однозначно.

Если вам абсолютно необходимо , чтобы переменные и аргументы назывались одинаково, вы можете использовать указатель this, чтобы быть конкретным:

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

Кстати, обратите внимание на конечную точку с запятой в определении класса - это необходимо для успешной компиляции.

6 голосов
/ 20 мая 2009

Да, вы должны написать это, используя ключевое слово "this" (которое является указателем в C ++):

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        }
}
1 голос
/ 20 мая 2009

В C++ на текущий экземпляр ссылается указатель const this.

class Foo {
    public:
        int x, y;
        void set_values(int x, int y)
        {
            this->x = x;
            this->y = y;
        };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...