Приведённый пример довольно плохо иллюстрирует суть вопроса, в силу того, что является примером неграмотного дизайна.
У вас есть класс - форматированная строка. Назовём его
FormattedString.
Далее мы определяем операторы для разных типов. В данном случае у нас есть тип - какой-то список чего-то. В ООП не может быть класса
MyList. Это дизайн в стиле GUI от Билла Гейтса, а не ООП от Гради Буча и Бьорна Страуструпа.
Поэтому у нас тип, назовём его
ListOfFoo - это список чего-то конкретного, в данном случае список
Foo.
И мы хотим добавить метод преобразования списка
Foo в форматированную строку.
Для этого мы добавляем в класс
FormattedString оператор присваивания для класса
ListOfFoo:
class FormattedString
{
public:
operator = (const ListOfFoo& src);
};
Но случаются ситуации, когда в приложении существует одна и только одна инстанция объекта. Например, объект
theApp.
Как, например, получить ссылку на этот объект. Не передавать же его по иерархии объектов.
Для этого удобно определить статический метод
Application::getApp(), который будет возвращать ссылку на инстанцию объекта-приложения.
Итак, сформулируем правило. Программа - это процессор. Объекты - это то, что она создаёт в оперативной памяти, статические объекты - это регистры этого процессора.