在尝试了解Poco网络库here时,我遇到了以下片段:
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
{
return new MyRequestHandler;
}
};
我在理解方法(
HTTPRequestHandler*
)的返回类型和方法(const HTTPServerRequest &
)的参数时遇到麻烦。为什么返回类型为
HTTPRequestHandler
指针? new MyRequestHandler
是否将地址返回给可以由其基本类型引用的对象?另外,我知道
const
用于使引用不可变,因此该方法不会使引用的对象发生突变,但是没有为引用类型提供名称,并且createRequestHandler
方法中未使用该名称。有人可以告诉我这里会发生什么吗?谢谢
最佳答案
返回类型
如果您查看“ Learning 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()
内部对其进行更改。