我正在忙于一项任务,我必须创建一个结构,并且我必须创建和删除一个对象。
以下是我如何用里面的函数创建结构。
struct Operation
{
char op;
double (*apply)(Operation*, double,double); // takes two doubles
}
我完全理解。现在必须创建对象。
Operation* Make(char op)
{
Operation* ret = new Operation;
ret -> op = op;
ret -> apply = doit;//doit is a norther function
return ret;
}
我知道“ - >”歌剧与说法相同:
(*ret).op = op;
删除对象;
void BrakeObject(Operation& o)
{
delete o;
o = NULL;
}
函数(apply)看起来和基本函数一样吗? 这是一个阵列吗?
Operation* ret = new Operation;
对象是什么,它只是一个功能?
答案 0 :(得分:1)
为什么动态分配?为什么不简单:
Operation Make(char op)
{
Operation ret = {op, doit};
return ret;
}
或者,如果您使用的是C ++ 11,只需:
Operation Make(char op)
{
return {op, doit};
}
在这两种情况下,都不需要再手动删除。
另外,apply
为什么要进行另一项操作?评论说“需要两个双打”,所以:
double (*apply)(double,double);
对我来说会更有意义。此外,doit
来自哪里?将apply函数作为参数传递也不是更有意义吗?以下是建议所有更改的程序:
struct Operation
{
char op;
double (*apply)(double, double);
}
Operation Make(char op, double (*apply)(double, double))
{
Operation ret = {op, apply};
return ret;
}
double add(double x, double y)
{
return x + y;
}
Operation op_add = Make('+', add);
答案 1 :(得分:0)
似乎你的愿景与任务不符......
A)结构
char op;
不能是“对象”。这是一个“价值”,嗯......
但是char *op;
可能没问题?
B)阵列。
Operation* ret = new Operation; //is this a array?
不。你已经创建了一个指向单值的指针。
C)运营商。这是错误的语法
(*ret) op = op;
这没关系
(*ret).op = op;
D)删除
void break(Operation& o)
这是错误的语法,这没关系
void BrakeObject(Operation*& o)
{
delete o;
o = NULL;
}