我必须创建一个对象才能在 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);
}
我正在尝试在 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);
}