结构和对象创建

时间:2012-07-29 09:18:18

标签: c++ arrays object structure

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

以下是我如何用里面的函数创建结构。

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;

对象是什么,它只是一个功能?

2 个答案:

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