继承的类是否可以实现具有不同返回类型的虚函数(不使用模板作为返回)?
发布于 2011-01-12 11:45:40
在某些情况下,是的,只要返回类型与原始返回类型是协变的,派生类使用不同的返回类型重写虚函数就是合法的。例如,考虑以下内容:
class Base {
public:
virtual ~Base() {}
virtual Base* clone() const = 0;
};
class Derived: public Base {
public:
virtual Derived* clone() const {
return new Derived(*this);
}
};在这里,Base定义了一个名为clone的纯虚拟函数,它返回一个Base *。在派生实现中,使用Derived *的返回类型重写此虚函数。尽管返回类型与基中的类型不同,但这是非常安全的,因为在任何时候您都会编写
Base* ptr = /* ... */
Base* clone = ptr->clone();对clone()的调用将始终返回一个指向Base对象的指针,因为即使它返回一个Derived*,该指针也可以隐式转换为Base*,并且操作是定义良好的。
更一般地说,函数的返回类型永远不会被视为其签名的一部分。只要返回类型是协变的,就可以用任何返回类型重写成员函数。
发布于 2011-01-12 11:45:06
虚函数的派生类实现可以具有。
https://stackoverflow.com/questions/4665117
复制相似问题