gpt4 book ai didi

c++ - 从另一个类调用类函数?

转载 作者:行者123 更新时间:2023-11-28 01:00:09 25 4
gpt4 key购买 nike

假设我有两个类,一个是 Foo 类,与用户交互,另一个是 Bar 类,它实际处理接收到的任何输入。 Foo 内部有一个 Bar 类型的对象,因此它可以在 Foo 接收到用户输入时调用 Bar 类的方法,将接收到的任何数据传递给“bar::onEvent()”函数进行处理。

Bar 方法 onEvent() 从那里根据传递的数据调用许多其他方法。然后,在某些情况下,这些方法可能需要从 Foo 类调用接口(interface)方法,例如输出或退出类型函数。

基本上,Foo 获取用户输入,将该数据传递给 Bar,Bar 处理该输入,Bar 将数据发回以供输出(如果适用)。 Foo 处理从用户接收数据和向用户发送数据,而 Bar 处理数据的实际处理。

所以 Foo 不断地检查输入,当接收到输入时,它会从 Foo 传递到 Bar 进行处理。在某些情况下,Bar 可能需要将新数据发送回 Foo 以进行输出。

这是我需要做的事情的简化版本。

class Foo
{
public:
Bar bar;
void genericFunctionSimulatingInput(char* data)
{
//when input is received, call bar class to handle the logic
while(data == someKindOfInput)
{
bar::onEvent(data);
}
}
void spitOut(char* data);
};

class Bar
{
void onEvent(char* data)
{
//do something with data
//here the modified data needs to be sent back to the user(could be a mathematical operation
//or something. But what I really need to call is "bu::spitOut(data);", not
Foo::spitOut(data);
}
};

int main()
{
//create the Foo object that I'll be using throughout
Foo bu;
//call the main loop function that will act as the heart of the code
bu.genericFunctionSimulatingInput("fdklafjdasl");
return 0;
}

我需要 Bar 从我在 main 函数中创建的已经存在的 Foo 对象调用函数,我称之为 bu,但我不知道如何将 bu 对象放入 bar 对象范围。

我只需要 bu 对象中的 bar 对象知道它所在的 bu 对象。

我该怎么做呢?我是否必须以某种方式将 bu 的引用传递给 bar.onEvent();方法?然后到这个初始方法调用的所有后续方法?如果是这样,我该怎么做?

如果我在 main 函数中同时创建了它们,我就知道该怎么做了。只是传递 &bu,但从 bu 本身内部传递?我不知道该怎么做。

我知道这是一个非常抽象的例子,但我希望我已经解释得足够多,您可以发挥想象力来完成剩下的工作。如果不是,我会尝试更好地解释它。

我只需要 Bu 的 Bar 类就可以访问 bu 的功能。

最佳答案

也许是这样的:

class Foo;

class Bar
{
public:
Bar(Foo &foo)
: m_foo(foo)
{ }

void onEvent();

private:
Foo &m_foo;
};

class Foo
{
public:
Foo()
: m_bar(*this)
{ }


void onEvent()
{
m_bar.onEvent();
}

void onEventDone()
{
}

private:
Bar m_bar;
};

Bar 中的函数调用Foo 中的函数必须在正确定义Foo 之后定义。所以它们不能内嵌在 Bar 中。

void Bar::onEvent();
{
// Do stuff
m_foo.onEventDone();
}

如果你希望 Bar of Foo 中的方法是私有(private)的,那么让它们成为彼此的 friend :

class Bar
{
friend class Foo;
// ...

class Foo
{
friend class Bar;
// ...

关于c++ - 从另一个类调用类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157267/

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