0

我正忙于一项任务,我必须创建一个结构,并且使用该结构我必须创建和删除一个对象。

这是我如何创建内部带有函数的结构。

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

该功能(应用)是否与基本功能相同?这是一个数组吗?

 Operation* ret = new Operation;

对象是什么,它只是一个函数吗?

4

2 回答 2

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);
于 2012-07-29T09:30:56.423 回答
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;
}
于 2012-07-29T09:33:12.767 回答