gpt4 book ai didi

C++ 构造行为

转载 作者:行者123 更新时间:2023-11-30 04:27:45 26 4
gpt4 key购买 nike

class OSwitch {
private:
Operator *operators[];
//int variable; <-- unused variable

public:
OSwitch() {}
~OSwitch() {}

void setOperator(int id, Operator *op) {
operators[id] = op;
}

void execute(int id) {
operators[id]->execute();
}

};

抽象基类 Operator 有几个子类。多次调用 setOperator() 时,数组会“忘记”最后一个元素。

例如

XOperator a;
YOperator b;
os.setOperator(1,a);
os.setOperator(2,b);
os.execute(1); // <- wont work

但是当声明了 int 变量(或 OperatorSwitch 中的任何其他变量)时,它就起作用了。我不知道这是如何工作的。

感谢任何提示。

最佳答案

您的成员变量 operators 是一个未确定大小的数组,它是一个不完整的类型,不允许出现在类定义中。

您可能想要的是整数到指针的映射:

#include <map>

class OSwitch
{
private:
std::map<int, Operator *> operators;
public:
void setOperator(int id, Operator *op) { operators[id] = op; }
void execute(int id) { operators[id]->execute(); }
};

请注意,在未分配有效指针的 ID 上调用 execute 将出错。您可以通过首先检查 map 元素是否存在来使其更加可靠。

关于C++ 构造行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com