2016-03-11 126 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_1'的'call_2'总是被正确地调用,因为它们在同一个类 – nikniknik2016

+0

中没有问题,唯一需要考虑的是在C++中,并非所有的东西都必须是类,并且可以争辩说这个类不是最合适的为这种情况构建。例如可以创建这个类的一个实例,即使它没有意义。我至少会让构造函数是私有的。 – user463035818

+1

具有纯函数的命名空间将会很好。你根本不需要任何课程。经验法则:当一个类中没有数据成员时,使用纯函数可能会更好。 – Jojje

回答

2

你在这里做的是用一个类来封装两个方法 - 就像命名空间一样。你基本上用一个类来替换名字空间的使用。

它工作吗?是的,它确实!

可以这样做吗?那么,从一个代码维护/可读性点,没有那么多,因为:

  • ,你可以从一个类
  • 继承你可以实例化一个类
  • 静态方法不属于任何一类实例,这可能会导致后续问题,特别是在扩展课程时。

如果你想要的只是封装,或者不污染全局命名空间的方法 - 这就是为什么你有命名空间。

当您正确使用C++语言特性时,代码更干净,更易读,更简单。