gpt4 book ai didi

c++ - 在不相关的类中使用对象

转载 作者:行者123 更新时间:2023-11-28 08:26:33 24 4
gpt4 key购买 nike

我有以下情况:

在项目 A 中,一个对象(比如 A1 类的 Obj1)实例化了 A2 类的 Obj2。

然后,从 Obj1,通过许多代码路径,可以实例化一个对象 Obj3(A3 类)。A3类在另一个项目中。

从 Obj1 的 main 方法到实例化类 A3 的对象的堆栈跟踪深度为 20 次调用,代码中至少有 100 处调用了实例化 A3 类的函数。

现在我想向 A2 类添加一个非静态方法(比如 test()),并能够从 A3 类的所有实例调用 Obj2.test()(不是 A2::test())。

我怎样才能以最合理的方式解决这个问题?

编辑:一些代码:

 class A2
{
//...
A2(string,string,...);
double test();
};

A2::A2(string,string,...)
{
//...
}

double A2::test()
{
//return 4.2; //in reality it's more complicated
}

class A1{

//...

A2* Obj2;
};

A1::A1()
{
Obj2 = new A2(string,string,...);
}

A1:run()
{
//here there are many possible code paths (switches instantiating objects of other classes)
//but all end up as:
A3* Obj3 = new A3();
Obj3->test_wrapper();
}

class A3{
//this is defined in another project, and I'd prefer that project doesn't reference A2 since A2 links against a couple of libraries...

static double A3::test_wrapper();
};

static double A3::test_wrapper()
{
//if I had Obj2 here, I'd do:
return Obj2.test();
//but I don't...
}

最佳答案

这里没有足够的信息来回答。

  1. A1 是否有 A2 或 A3 成员? A2 或 A3 是否有 A1 成员?
  2. 实例化 A2 或 A3 的参数是什么?

如果 A3 想调用 Obj2.test(),则要么

  1. A3 需要一个 A2 类型的成员
  2. A3 需要一个具有 A2 类型成员的 X 类型成员——尽管可能应该通过 X 转发调用
  3. A3中需要调用test的方法需要带一个A2参数
  4. 该方法可以采用具有 A2 成员的参数 X(同样,通过 X 转发)。

开始使用一些全局的东西将 A2 塞入 A3 并从 A3 返回可能不是一个好主意。

如果A3只有一个方法需要调用A2,那么A2可以是那个方法的成员吗?是否所有来电者都有 A2(或者他们能够得到一个?)。

A2 的 test() 的功能可以去别的地方吗?

关于c++ - 在不相关的类中使用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3907177/

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