我的目标是,不是将所有方法放在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
,并且它们还将实例化一个将创建Router
和Client
的ServerInterface
,依此类推 - 直到您获得堆栈溢出。
为了在某些工作条件下获得它,您需要添加一些打破该循环的东西,以便它不会无休止地实例化Router
s 和Client
s。