Причина, по которой требуется экземпляр класса, хорошо, если класс имеет «состояние». Класс имеет состояние, если он имеет переменные-члены, которые меняются со временем, тогда вам понадобится экземпляр этого класса для вызова (нестатических) функций-членов. С другой стороны, если класс не имеет статуса (или если метод не влияет на состояние объектов этого класса, то есть он не изменяет переменные-члены), вы можете сделать его статической функцией-членом. Статические функции-члены не требуют экземпляра класса для вызова.
#include <iostream>
class Widget
{
public:
Widget(): x(0) {} // constructor with initialization list
void setX(int newVal) { x = newVal; } // changes the state of an instance
void printX() { std::cout << x << std::endl; } // interacts with the state of an instance
static void printClassName() { std::cout << "Widget" << std::endl; } // doest change or interact with the state therefore can be made static
private:
int x;
};
int main(int argc, char* argv[])
{
Widget w;
w.printX();
w.setX(4);
w.printX();
Widget::printClassName();
//w::printX(); <-- this won't compile because it is not static
return 0;
}
Как вы можете видеть here, выход: Widget