【发布时间】:2020-12-24 11:57:27
【问题描述】:
我想创建多个对相同数据进行操作的对象,但每个对象对该数据执行不同的功能。
我试图这样做:
class test
{
public:
test(int x, int y)
{
this->x = x;
this->y = y;
}
int (*func)();
private:
int x;
int y;
};
int test1()
{
this->x += 100;
return this->x;
}
int test2()
{
this->x -= 100;
return this->x;
}
int main()
{
test t1(1,2);
t1.func = &test1;
return 0;
}
但是,它没有编译。因为 test1 和 test2 甚至不知道 x (也不知道这个指针)。 我怎样才能让它工作? 也许我正在尝试使用错误的工具来完成此任务?
【问题讨论】:
-
您的第一个问题是
test1或test2中没有this指针,因为它们不是成员函数。由于x也是私有的,您必须在test中将它们声明为friend函数。还有更简单的替代方案,例如继承,或者某种模板? -
我不希望他们成为这个类的成员......假设有 1000 个测试对象。
-
有什么理由不向
test添加getter(和setter)函数,以便可以从类外访问数据?然后你的函数可以将test对象作为参数(例如:const test&)——你甚至可以避免所有函数指针的东西(假设没有任何真正的需要) -
在那种情况下,我可以只使用结构,不是吗?我希望能够跟踪在特定测试对象上每次调用 func 后这些数据如何变化。虽然每个测试对象都应该有自己的函数来以不同的方式处理这些数据。
-
struct和class在 C++ 中是一样的,它们只是在默认访问修饰符上有所不同。而且我不明白 getter 和 setter 如何干扰您的跟踪(或者您将如何跟踪当前尝试中的数据更改)