如何调用C ++静态方法

时间:2009-07-30 19:38:27

标签: c++ static-methods

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

class MyMath {
    public:
       static MyObject calcSomething(void);
    private:
};

我想这样做:

int main() { 
    MyObject o = MyMath.calcSomething(); // error happens here
}

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

  

MyMath.cpp:69:错误:在'。'之前预期的primary-expression令牌

我做错了什么?我来实例化MyMath吗?如果有可能,我宁愿不要。

5 个答案:

答案 0 :(得分:74)

使用::代替.

MyObject o = MyMath::calcSomething();

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

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

MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();

答案 1 :(得分:12)

  

我做错了什么?

您只是使用了错误的语法... ::运算符(scope resolution operator)是您访问不同命名空间中的类或成员的方式:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax
}
  

我是否必须实例化MyMath?

没有

答案 2 :(得分:1)

对于这种情况,您需要MyMath :: calcSomething()。 '。'语法用于调用对象中的函数。 ::语法用于调用类或命名空间中的函数。

答案 3 :(得分:1)

致电MyMath::calcSomething()

答案 4 :(得分:1)

试试这种方式

#include <iostream>
using namespace std;
class MyMath {  
public:
    static MyMath* calcSomething(void);
private:
};
MyMath* MyMath::calcSomething()
{
    MyMath *myMathObject=new MyMath;
    return myMathObject;
}
int main()
{   
    MyMath *myMathObject=MyMath::calcSomething();
    /////Object created and returned from static function calcSomeThing   
}

由于