写一个C++类ins储存string name和functionintint run构造函数用于初始化变量并将自己上传到map ins_map再写一个复制构造函数和等号重载
下面是一个示例的C++类ins,其中包含了构造函数、复制构造函数和等号重载函数:
#include <iostream>
#include <map>
#include <functional>
class ins {
private:
std::string name;
std::function<int(int)> run;
public:
static std::map<std::string, ins*> ins_map;
ins(std::string n, std::function<int(int)> r) : name(n), run(r) {
ins_map[name] = this;
}
ins(const ins& other) : name(other.name), run(other.run) {
ins_map[name] = this;
}
ins& operator=(const ins& other) {
if (this != &other) {
name = other.name;
run = other.run;
ins_map[name] = this;
}
return *this;
}
int execute(int value) {
return run(value);
}
};
std::map<std::string, ins*> ins::ins_map;
int main() {
// 创建一个ins对象并添加到ins_map中
ins obj1("obj1", [](int value) { return value * 2; });
// 复制构造一个新的ins对象,并添加到ins_map中
ins obj2 = obj1;
// 使用等号重载将obj2的值赋给obj3,并更新ins_map中的映射
ins obj3("obj3", [](int value) { return value + 10; });
obj3 = obj2;
// 从ins_map中执行obj1、obj2和obj3的函数
std::cout << obj1.execute(5) << std::endl; // 输出:10
std::cout << obj2.execute(5) << std::endl; // 输出:10
std::cout << obj3.execute(5) << std::endl; // 输出:10
return 0;
}
在上面的示例中,我们定义了一个名为ins的类,其中包含了一个name成员变量和一个run函数对象成员变量。构造函数用于初始化这两个变量,并将当前对象上传到静态成员变量ins_map中。复制构造函数和等号重载函数用于复制对象并更新ins_map的映射。
在main函数中,我们创建了一个ins对象obj1,并将其添加到ins_map中。然后,使用复制构造函数创建了一个新的ins对象obj2,并将其也添加到ins_map中。接下来,我们使用等号重载将obj2的值赋给obj3,并更新了ins_map的映射。最后,我们通过execute函数来执行obj1、obj2和obj3的函数,并输出结果。
请注意,上述示例仅为演示目的,实际使用时可能需要更多的错误检查和边界情况处理
原文地址: https://www.cveoy.top/t/topic/igVd 著作权归作者所有。请勿转载和采集!