我的目标是,而不是将所有方法都放在ServerInterface(superclass)中,我想将这些方法放在子类中以更好地组织代码。
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;
}
在我的情况下,只允许访问我的代码中ProductionServer
必须继承的内容ServerInterface
。因此,我不想打电话给productionServer->randomRouterFunction()
或productionServer->randomClientFunction()
,而是希望能够打电话给productionServer->Router->randomRouterFunction()
等
即使intellisense告诉我一切正常,尝试运行我收到的代码
main:289:20:错误:“类ProductionServer”没有名为“ router”的成员
productionServer-> router-> randomRouterFunction();
这甚至可行吗?认为它可能不起作用的原因是,超类创建了Router的成员(即子类),然后router子类又继承了另一个超类,因为它继承了它,然后在超类中创建了另一个Router子类。 。那将是一个无限循环?XD
ps。仅作为示例,randomFunction()可以是任何方法。
问题出在设计上。您可以编译它,但是当您创建ProductionServer
它时将实例化一个ServerInterface
将创建aRouter
和a的对象,Client
而那些实例也将都实例化一个ServerInterface
将创建aRouter
和a的对象Client
,依此类推-直到堆栈溢出。
为了使它处于某种工作状态,您需要添加一些破坏该循环的内容,以使其不会无休止地实例化Router
s和Client
s。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句