在尝试了解poco网络库here时,我发现了以下代码片段:
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
{
return new MyRequestHandler;
}
};我在理解方法的返回类型(HTTPRequestHandler*)和方法的参数(const HTTPServerRequest &)时遇到了问题。
为什么返回类型是HTTPRequestHandler指针?new MyRequestHandler是否将地址返回给可由其基类型引用的对象?
另外,我知道const是用来使引用不可变的,这样方法就不会改变被引用的对象,但是没有为引用类型提供名称,createRequestHandler方法中也没有使用它。有人能告诉我这是怎么回事吗?
谢谢
发布于 2012-07-12 12:35:53
返回类型
如果你看一下"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()中更改。
发布于 2012-07-12 12:13:31
有两种方法可以返回访问对象的方法,而无需在C++中复制该对象:返回指向该对象的指针或返回对该对象的引用。由于各种原因,指针往往是首选方法(例如,引用不能重新分配)。请注意,如果它返回HTTPRequestHandler,而不是指向它的指针,则意味着对象将被复制。
不需要提供参数名称,因为它没有被使用。必须提供类型,以便函数签名完整。同样,在向前声明函数时也不必提供名称,因为编译器只关心类型及其进入的顺序。
https://stackoverflow.com/questions/11444790
复制相似问题