c++ - 结构和对象创建

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

函数(应用)看起来和基本函数一样吗? 这是数组吗?

 Operation* ret = new Operation;

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

最佳答案

为什么要动态分配?为什么不简单地:

Operation Make(char op)
{
    Operation ret = {op, doit};
    return ret;
}

或者,如果您使用的是 C++11,只需:

Operation Make(char op)
{
    return {op, doit};
}

这两种情况都不需要再手动删除

还有,为什么apply要进行另一个操作?评论说“需要两次 double ”,所以:

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

关于c++ - 结构和对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708079/

相关文章:

c++ - GCC 警告 [未初始化]

java - 从 Java 中的列表数组填充字符串数组

arrays - VBA如何在消息框中显示数组

javascript - 如何在javascript中创建对象的新实例

java - 以C++方式思考Java引用

c++ - 在哪个头文件中声明了函数 `_tcscpy_s`?

C 代码中的 C++ 异常处理

javascript - 替换 javascript 数组中的字符串

ios - 使用touchesBegan方法从节点获取对象的引用

c++ - 与参数结合的各种符号(*、&等)有什么区别?