У меня есть один вопрос о статической и нестатической функции и переменной.
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;
};
статическая функция доступ к нестатической переменной
Это нормально или нет? Я озадачен этим!
При вызове статическая функция не привязана к экземпляру класса. Экземпляры класса (объекты) будут сущностями, которые содержат «нестатические» переменные. Следовательно, из статической функции вы не сможете получить к ним доступ без фактической передачи или сохранения в другом месте определенного экземпляра для работы.
Итак, да, код в вашем последнем примере действителен, потому что вы переданы в экземпляре. Однако вы не смогли сделать:
static void staticFunction()
{
// error, this function is static, and is therefore
// not bound to a specific instance when called
i = 5;
}
Статический означает, что он не зависит от конкретного экземпляра класса. Статические методы не имеют доступа к указателю this
. По этой причине вам нужно вызывать их, используя имя класса .
Когда вы вызываете статический метод, у вас может даже не быть определенного экземпляра класса.
нестатические средства подразумевают экземпляр и могут отличаться в зависимости от экземпляра.
Таким образом, в принципе, нет смысла обращаться к нестатическим членам из статических методов.
Для этого вам нужно понять, что такое статика.
Статические элементы данных существуют один раз для всего класса, в отличие от нестатических элементов данных, которые существуют индивидуально в каждом экземпляре класса. У них будет область видимости класса и они не будут привязаны к экземпляру класса.
Для доступа к статическому члену класса мы используем следующий формат: ::
, если вы создали 10 объектов класса. Предположим, вы смогли получить доступ к нестатическая переменная в статическом члене класса. Когда вызывается статическая функция, какой член объекта необходимо изменить?
Это не нормально. Статические функции доступны без экземпляра класса и, следовательно, не могут получить доступ к информации, для определения которой вам потребуется экземпляр.
Например, вам не нужна машина, чтобы знать, сколько у нее колес. Достаточно чертежей обычного автомобиля (это может быть статическая информация), но вы не можете сказать, какого цвета автомобиль, если только вы не относится к конкретному автомобилю (для этой информации нужен конкретный экземпляр объекта).