Возможно ли доступ к доступу и использование статических членов в классе без предварительного создания экземпляра этого класса? Т.е. рассматривать класс как своего рода свалки для глобаловСтатические элементы C++ в классе
Джеймс
Возможно ли доступ к доступу и использование статических членов в классе без предварительного создания экземпляра этого класса? Т.е. рассматривать класс как своего рода свалки для глобаловСтатические элементы C++ в классе
Джеймс
Вы также можете вызвать статический метод с помощью нулевого указателя. Приведенный ниже код будет работать, но, пожалуйста, не используйте его :)
struct Foo
{
static int boo() { return 2; }
};
int _tmain(int argc, _TCHAR* argv[])
{
Foo* pFoo = NULL;
int b = pFoo->boo(); // b will now have the value 2
return 0;
}
Да:
class mytoolbox
{
public:
static void fun1()
{
//
}
static void fun2()
{
//
}
static int number = 0;
};
...
int main()
{
mytoolbox::fun1();
mytoolbox::number = 3;
...
}
Да, это именно то, что static
означает для членов класса:
struct Foo {
static int x;
};
int Foo::x;
int main() {
Foo::x = 123;
}
Также см. Http://www.acm.org/crossroads/xrds2-4/ovp.html#SECTION00040000000000000000 для некоторого удовольствия чтения статических данных на C++. –
В Короче, да.
В течение длительного времени статический член можно назвать где угодно, вы просто рассматриваете имя класса как пространство имен.
class Something
{
static int a;
};
// Somewhere in the code
cout << Something::a;
Вы можете рассматривать имя класса как пространство имен только в контексте синтаксиса не любым другим способом. –
С другой стороны, это то, что пространства имен для:
namespace toolbox
{
void fun1();
void fun2();
}
только использование классов статических функций для политики классы.
Технически это неопределенное поведение. По какой-либо причине вы не можете почитать нулевой указатель. Единственное, что вы можете сделать с нулевым указателем: a) назначить ему другой указатель и b) сравнить его с другим указателем. – KeithB
Указатель/pFoo будет разыменован в случае доступа к члену. статическая функция не имеет доступа к элементам и нет членов. Даже не виртуальные методы могут быть вызваны с помощью нулевого указателя без исключения. они вылетают только при доступе к членам. Любой должен знать и принимать это, чтобы найти некоторые странные ошибки. –