我必须创建一个对象才能在 C++ 中使用 class 方法吗?

Have I to create a Object to use a class method in c++?

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

这是 class 文件的来源:

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);
}

但是我得到一个编译错误:

improper use of typedef 'Op'

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

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

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

那么你可以这样称呼它:

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

如果不声明为static,确实需要先创建一个对象,eg:

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);

一般来说,如果您只是在 class 中定义函数而没有数据,最好考虑使用名称空间而不是 classes。请参阅此主题:

这种情况下可以考虑如下设计:

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);
}