Статический метод - это метод, который не выполняется ни на каком конкретном объекте. Это очень похоже на автономную функцию вне класса, за исключением того, что ей разрешен доступ к закрытым членам в этом классе.
Если вы anotherClassMethod()
не статичны, это означает, что он должен вызываться для определенного объекта, экземпляра класса. Поскольку он вызывается для объекта, он может получить доступ к данным, хранящимся в этом объекте (нестатические переменные-члены). Если myClassMethod()
является статическим, и вы реализуете его как
void MyClass::myClassMethod() {
anotherClassMethod();
}
Это не сработает, потому что anotherClassMethod()
ожидает вызова для определенного объекта, но myClassMethod()
не имеет такового. Но если вы знаете, к какому объекту вы хотите его вызвать, вы можете сделать это как обычный вызов метода для объекта:
void MyClass::myClassMethod(MyClass &object) {
object.anotherClassMethod();
}
object
не нужно передавать в качестве аргумента; это может быть статическая переменная-член в классе, например:
class MyClass {
private:
static MyClass theInstance;
// ...
};
void MyClass::myClassMethod() {
theInstance.anotherClassMethod();
}
В конечном счете, вопрос, который вам нужно задать себе: почему myClassMethod()
статичен, а почему anotherClassMethod()
нестатичен? Сделай шаг назад, подумай о том, что myClassMethod()
должен делать. Имеет ли смысл вызывать его, когда у вас нет экземпляра для работы? Если да, то почему он должен вызывать метод, который ожидает работать с экземпляром?