在尝试了解 poco 网络库时 here ,我遇到了以下片段:
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
{
return new MyRequestHandler;
}
};
我无法理解方法的返回类型 (HTTPRequestHandler*
) 和方法的参数 (const HTTPServerRequest &
)。
为什么返回类型是HTTPRequestHandler
指针? new MyRequestHandler
是否返回一个对象的地址,该对象可以由其基类型引用?
另外,我知道 const
用于使引用不可变,这样该方法就不会改变引用的对象,但是没有为引用类型提供名称并且它没有在 createRequestHandler
方法。有人可以告诉我这里发生了什么吗?
谢谢
最佳答案
返回类型
如果您查看“学习 Poco”代码网站,
class MyRequestHandler : public HTTPRequestHandler
{
// ... removed code
};
MyRequestHandler 派生自 HTTPRequestHandler。所以,MyRequestHandler 是一个 HTTPRequestHandler 因为继承。所以返回一个指向 MyRequestHandler 的指针是有效的,因为它也是一个指向 HTTPRequestHandler 的指针。
函数参数
该片段令人困惑,因为它将参数指定为类型但没有变量名。它实际上与:
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest & notUsed)
{
return new MyRequestHandler;
}
};
“notUsed”变量是……未使用的。所以你问,为什么会有争论?因为它覆盖了基类 HTTPRequestHandlerFactory 中声明的一个函数。此函数将有一个参数 const HTTPServerRequest &
,因此它也必须出现在派生类的覆盖函数中(即使它未被使用)。如果要在函数 createRequestHandler()
中使用“notUsed”,const
关键字可确保它不能在 createRequestHandler()
中更改。
关于c++ - 返回指针并传入 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444790/