如何调用C++静态方法

29 c++ static-methods

是否可以像在Java中那样从C++中的静态方法返回一个对象?我这样做:

class MyMath {
    public:
       static MyObject calcSomething(void);
    private:
};
Run Code Online (Sandbox Code Playgroud)

我想这样做:

int main() { 
    MyObject o = MyMath.calcSomething(); // error happens here
}
Run Code Online (Sandbox Code Playgroud)

MyMath类中只有静态方法,因此实例化它没有意义.但我得到这个编译错误:

MyMath.cpp:69:错误:在'.'之前预期的primary-expression 代币

我究竟做错了什么?我是否必须实例化MyMath?如果有可能,我宁愿不要.

Pau*_*aul 74

::而不是.

MyObject o = MyMath::calcSomething();

当您在没有该类对象的情况下调用该方法时,您应该使用::符号.您也可以通过类对象或指向它们的指针调用静态方法,在这种情况下,您应该使用通常.->表示法:

MyObject obj;
MyObject* p = new MyObject();

MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
Run Code Online (Sandbox Code Playgroud)

  • +1表示您仍然可以通过object->表示法调用静态函数. (8认同)

Joh*_*sch 12

我究竟做错了什么?

您只是使用不正确的语法... ::运算符(范围解析运算符)是您访问不同命名空间中的类或成员的方式:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax
}
Run Code Online (Sandbox Code Playgroud)

我是否必须实例化MyMath?

没有.