我是否要在c ++中创建一个使用类方法的Object?

时间:2018-02-22 23:56:40

标签: c++ class c++builder

我正在尝试在C ++ Builder中创建一个简单的Form,我正在尝试在类中创建一个adding()方法,但如果可以的话,我不想创建一个对象只是为了使用一个不保存任何值的方法。

这是类文件的来源:

class Op{
public:
    double adding(double x, double y);
};

double Op::adding(double x, double y){
    return x + y;
}

这是调用按钮的动作:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double value1 = text1->Text.ToDouble();
    double value2 = text2->Text.ToDouble();
    double result = Op.adding(value1, value2);
}

但是我收到编译错误:

  

不正确使用typedef'Op'

如果我必须创建像Op operations;这样的对象,请告诉我如何。

2 个答案:

答案 0 :(得分:6)

对于您的尝试,请将adding()声明为static

class Op{
public:
    static double adding(double x, double y);
};

然后你可以这样称呼它:

double result = Op::adding(value1, value2);

如果你没有将其声明为static,你确实需要先创建一个对象,例如:

Op operation;
double result = operation.adding(value1, value2);

或者:

double result = Op().adding(value1, value2);

或者,如果使用C ++ Builder之一Clang-based compilers

double result = Op{}.adding(value1, value2);

答案 1 :(得分:3)

通常,如果您只是在类中定义函数而没有数据,那么最好考虑使用名称空间而不是类。请参阅此主题:Using a function pointer from one class in a function of another class

在这种情况下,您可以考虑以下设计:

namespace Op{//this will go into a header file
    double adding(double x, double y){
        return x + y;
    }
    //define other functions as required
};

//usage in .cpp implementation file
//include the header file containing the namespace 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double value1 = text1->Text.ToDouble();
    double value2 = text2->Text.ToDouble();
    double result = Op::adding(value1, value2);
}