C++ Статический членский вызов метода на экземпляре класса

38
задан Melebius 2 March 2017 в 12:27
поделиться

3 ответа

В стандарте говорится, что не необходимо назвать метод через экземпляр, который не означает, что Вы не можете сделать этого. Существует даже пример, где он используется:

C++ 03, 9,4 статических участников

А статический участник s класса X может быть отнесен в использование выражения X квалифицированного идентификатора:: s; не необходимо использовать членский синтаксис доступа класса (5.2.5), чтобы относиться к статическому участнику. Статический участник может быть отнесен в использование членского синтаксиса доступа класса, в этом случае объектное выражение оценено.

class process {
public:
   static void reschedule();
};

process& g();

void f()
{
   process::reschedule(); // OK: no object necessary             
   g().reschedule(); // g() is called
}
63
ответ дан Abdullah 27 November 2019 в 03:27
поделиться

Для статических функций doesnВґt нужен объект instanciated для того, чтобы быть названными, таким образом

k.DoCrash();

ведет себя точно то же как

Test::DoCrash();

использование оператора разрешения области видимости (::) определить статическую функцию в классе.

Уведомление, которые в оба заключают компилятор в корпус doesnВґt, поместило this указатель в стеке, так как для статической функции не нужен он.

12
ответ дан P0W 27 November 2019 в 03:27
поделиться

статические методы можно назвать также с помощью объекта класса, точно так же, как он может быть сделан в Java. Тем не менее, Вы не должны делать этого. Используйте оператор объема как Test::DoCrash();, Возможно, Вы думаете о пространствах имен:

namespace Test {
    void DoCrash() {
        std::cout << "Crashed!!" << std::endl;
    }
};

, который можно только назвать Test::DoCrash(); снаружи того пространства имен, если функция не импортируется явно с помощью using directive/declaration в объем вызывающей стороны.

2
ответ дан Johannes Schaub - litb 27 November 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: