是否可以在 C++ 中的超类中拥有子类的成员



我的目标是,不是将所有方法放在ServerInterface(超类)中,而是想将这些方法放在子类中以更好地组织代码。

class ServerInterface
{
public:
Router* router = new Router();
Client* client = new Client();
ServerInterface() {
} //Creates new Router and Client instance
};
class Router : public ServerInterface
{
public:
Router() {}
void randomRouterFunction() {}
};
class Client : public ServerInterface
{
public:
Client() {}
virtual void randomClientFunction() {};
};

class ProductionServer : public ServerInterface
{
public:
ProductionServer() {}
};
int main() {
ProductionServer* productionServer = new ProductionServer();
productionServer->router->randomRouterFunction(); //causes it to not debug
return 0;
}

在我的情况下,我只能访问必须从代码中的ServerInterface继承ProductionServer。 所以与其打电话给productionServer->randomRouterFunction()productionServer->randomClientFunction(),我希望能够打电话给productionServer->Router->randomRouterFunction()

即使智能感知告诉我一切正常,尝试运行我收到的代码

main:289:20: 错误:"类生产服务器"没有命名的成员 "路由器">

productionServer->router->randomRouterFunction();

这是否可行?认为它可能不起作用的原因是因为超类创建了路由器的成员,该成员是子类,然后路由器子类创建了另一个超类,因为它继承了它,然后在超类中创建另一个路由器子类。这将是一个无限循环?鑫达

附言。randomFunction() 可以是任何方法,仅用作示例。

问题出在设计上。您可以编译它,但是当您创建ProductionServer时,它将实例化一个ServerInterface,该将创建一个Router和一个Client,并且它们还将实例化一个将创建RouterClientServerInterface,依此类推 - 直到您获得堆栈溢出。

为了在某些工作条件下获得它,您需要添加一些打破该循环的东西,以便它不会无休止地实例化Routers 和Clients。

最新更新