如果每个成员函数每个类只包含一次(由所有实例共享),那么声明成员函数静态的目的究竟是什么?它是否像被声明为const的函数一样,因为它修改了特定类型的数据(在这种情况下,是静态数据成员)?
答案 0 :(得分:4)
普通成员函数需要运行类实例。可以直接调用静态方法,而无需先创建类的实例。
正常方法:
MyClass myClass;
myClass.NormalMethod();
静态方法:
MyClass::StaticMethod();
因此,普通方法非常适合使用类数据的函数。如果一个方法不需要使用类数据,那么它就可能成为静态的候选者。
答案 1 :(得分:2)
类方法(静态或其他方法)可以访问该类的任何对象的私有成员,而不仅仅是它自己的实例。静态方法也是如此,除非您将实例传递给实例,否则它们没有实例。
您也可以使用自由函数并将其声明为朋友,但是自由函数意味着可以对不同类的对象进行操作的更高级别的抽象。一个静态类方法说“我只能根据我的班级来理解”
答案 2 :(得分:0)
静态方法的一个应用是创建实例和返回指针。例如,可能存在调用者不应该知道的派生类 - “factory”函数知道要使用哪个派生类。
当然,当你需要创建一个对象时,你可能还没有一个对象可以使用它,即使你这样做,其他对象也不相关。
基本上,有时某些操作是类提供的抽象的一个方面,但该操作与特定对象无关 - 或者至少不是已存在的对象。在这种情况下,您应该将操作实现为静态函数。
类似地,一些数据与类提供的抽象有关,但与该类的特定实例无关。该数据可能最好作为静态成员变量实现。