Como chamar o método estático C ++
-
05-07-2019 - |
Pergunta
É possível devolver um objeto de um método estático em C ++ como existe em Java? Estou fazendo isso:
class MyMath {
public:
static MyObject calcSomething(void);
private:
};
E eu quero fazer isso:
int main() {
MyObject o = MyMath.calcSomething(); // error happens here
}
Existem apenas métodos estáticos na aula de Mymath, então não faz sentido instantá -la. Mas eu recebo esse erro de compilação:
Mymath.cpp: 69: erro: expressão primária esperada antes '.' símbolo
O que estou fazendo errado? Eu tenho para instanciar o mymath? Eu preferiria não, se for possível.
Solução
Usar ::
ao invés de .
MyObject o = MyMath::calcSomething();
Quando você está chamando o método sem o objeto da classe, você deve usar ::
notação. Você também pode chamar o método estático por meio de objetos de classe ou ponteiros para eles, neste caso você deve usar .
ou ->
notação:
MyObject obj;
MyObject* p = new MyObject();
MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
Outras dicas
O que estou fazendo errado?
Você está simplesmente usando sintaxe incorreta ... o ::
operador (Operador de resolução de escopo) é como você acessa aulas ou membros em diferentes namespaces:
int main() {
MyObject o = MyMath::calcSomething(); // correct syntax
}
Eu tenho que instanciar o mymath?
Não.
Para este caso, você quer mymath :: calcsomething (). O '.' A sintaxe é para chamar funções em objetos. A sintaxe :: é para chamar funções em uma classe ou um espaço para nome.
Ligar MyMath::calcSomething()
Tente assim
#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
}
Obrigado