2016-03-11 1 views
1

У меня есть класс с нестационарными функциями. Из-за архитектуры моей программы я думаю, что будет лучше использовать статические функции, поскольку класс - это просто утилита. В некоторых случаях мне просто нужна одна функция класса, поэтому я вижу ненужным создание объекта. В основном у меня есть это:Статическая функция от статической функции

class StaticCall 
{ 
public: 
    StaticCall(){} 
    static int call_1() 
    { 
     std::cout << "In call 1" << std::endl; 
     call_2(); 
     return 0; 
    } 
    static int call_2(); 
    { 
     std::cout << "In call 2" << std::endl; 
     return 0; 
    } 
}; 
int main(int argv, char** argc) 
{ 
    std::cout << "Calling 1" << std::endl; 
    StaticCall::call_1(); 
    std::cout << std::endl; 
    std::cout << "Calling 2" << std::endl; 
    StaticCall::call_2(); 
    return 0; 
} 

Это прекрасно работает, но мне было интересно, могут ли быть проблемы с этим методом. Я могу добиться того же, используя пространство имен, как уже говорят другие сообщения. Но поскольку у меня уже есть класс, я хочу сделать это со статическими функциями.

+0

никаких проблем; 'call_2' из' call_1' всегда вызываются правильно, потому что они находятся в одном классе – nikniknik2016

+0

без проблем, единственное, что нужно учитывать, это то, что в C++ не все должно быть классом, и можно утверждать, что этот класс не является наиболее подходящим построить для этой ситуации. например можно создать экземпляр этого класса, даже если это не имеет смысла. Я бы, по крайней мере, сделал конструктор закрытым. – user463035818

+1

Простое пространство имен с чистыми функциями. вам действительно не нужен какой-либо класс. Правило большого пальца: когда в классе нет элементов данных, лучше использовать чистые функции. – Jojje

ответ

2

Что вы здесь делаете, это использовать класс, чтобы инкапсулировать два метода - то же самое, что и пространство имен. Вы существенно заменяете использование пространства имен классом.

Это работает? Да!

В порядке ли это сделать? Ну, с точки кода обслуживания/читаемости зрения, не так много, потому что:

  • вы можете наследовать от класса
  • вы можете создать экземпляр класса
  • статические методы не относятся к любому классу экземпляр, и это может привести к проблемам позже в строке, особенно при расширении класса.

Если все, что вам нужно, это инкапсуляция или способ не загрязнять глобальное пространство имен - вот почему у вас есть пространства имен.

Код является более чистым, более читаемым и намного менее сложным, если вы правильно используете возможности языка C++.

Смежные вопросы