Under normal circumstances, the return type of a virtual function and it’s override must match. Thus, the following will not work:
classBase
{
public:
virtualint GetValue() { return5; }
};
class Derived: public Base
{
public:
virtual double GetValue() { return6.78; }
};However, there is one special case in which this is not true. If the return type of a virtual function is a pointer or a reference to a class, override functions can return a pointer or a reference to a derived class.These are called covariant return types. Here is an example:
class Base
{
public:
// This version of GetThis() returns a pointer to a Base class
virtual Base* GetThis() { return this; }
};
class Derived: public Base
{
// Normally override functions have to return objects of the same type as the base function
// However, because Derived is derived from Base, it's okay to return Derived* instead of Base*
virtual Derived* GetThis() { return this; }
};Note that some older compilers (eg. Visual Studio 6) do not support covariant return types.
本文探讨了C++中虚拟函数的协变返回类型特性。通常情况下,派生类中覆盖的虚拟函数必须与基类中的虚拟函数具有相同的返回类型。但当返回类型为指向类的指针或引用时,则允许返回派生类的指针或引用。
513

被折叠的 条评论
为什么被折叠?



