нестатичный по сравнению со статической функцией и переменной

У меня есть один вопрос о статической и нестатической функции и переменной.

1) нестатическая функциональная статическая переменная доступа.

Это в порядке!

class Bar
{
public:

     static int i;

     void nonStaticFunction() {

         Bar::i = 10;

     }

};

int Bar::i=0;

2) нестатическая функциональная нестатическая переменная доступа

Определенно хорошо!

3) статический функциональный доступ статический variable&funciton

Определенно хорошо!

4) статический функциональный доступ нестатическая функция

Это в порядке

class Bar
{
public:
     static void staticFunction( const Bar & bar)
     {
         bar.memberFunction();

     }

     void memberFunction() const
     {

     }

}

5) статическая функциональная нестатическая переменная доступа

Это в порядке или не хорошо? Я озадачен об этом!

Как насчет этого примера

class Bar
{
public:
     static void staticFunction( Bar & bar)
     {
         bar.memberFunction();

     }

     void memberFunction()
     {

         i = 0;
     }

     int i;

};
10
задан deft_code 18 February 2010 в 02:59
поделиться

4 ответа

статическая функция доступ к нестатической переменной

Это нормально или нет? Я озадачен этим!

При вызове статическая функция не привязана к экземпляру класса. Экземпляры класса (объекты) будут сущностями, которые содержат «нестатические» переменные. Следовательно, из статической функции вы не сможете получить к ним доступ без фактической передачи или сохранения в другом месте определенного экземпляра для работы.

Итак, да, код в вашем последнем примере действителен, потому что вы переданы в экземпляре. Однако вы не смогли сделать:

static void staticFunction()
{
    // error, this function is static, and is therefore
    // not bound to a specific instance when called
    i = 5;


}
13
ответ дан 3 December 2019 в 17:58
поделиться

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

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

нестатические средства подразумевают экземпляр и могут отличаться в зависимости от экземпляра.

Таким образом, в принципе, нет смысла обращаться к нестатическим членам из статических методов.

7
ответ дан 3 December 2019 в 17:58
поделиться

Для этого вам нужно понять, что такое статика.

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

Для доступа к статическому члену класса мы используем следующий формат: ::

, если вы создали 10 объектов класса. Предположим, вы смогли получить доступ к нестатическая переменная в статическом члене класса. Когда вызывается статическая функция, какой член объекта необходимо изменить?

1
ответ дан 3 December 2019 в 17:58
поделиться

Это не нормально. Статические функции доступны без экземпляра класса и, следовательно, не могут получить доступ к информации, для определения которой вам потребуется экземпляр.

Например, вам не нужна машина, чтобы знать, сколько у нее колес. Достаточно чертежей обычного автомобиля (это может быть статическая информация), но вы не можете сказать, какого цвета автомобиль, если только вы не относится к конкретному автомобилю (для этой информации нужен конкретный экземпляр объекта).

1
ответ дан 3 December 2019 в 17:58
поделиться
Другие вопросы по тегам:

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