对于返回类型,里氏替换原则要求返回值的协方差。
让我们假设返回类型的小类型层次结构:
class B {};
class D : public B {};
那时的工人阶级可以
class Base {
virtual B& func();
};
class Derived : public Base {
virtual D& func();
};
这将符合LSP,因为返回类型是协变的( and的层次结构是Base
andDerived
的“co” )。B
D
如果容器确实发挥作用怎么办?
class Base {
virtual vector<B>& func();
};
class Derived : public Base {
virtual vector<D>& func();
};
这仍然符合 LSP 吗?与vector<B>
和是vector<D>
“协变的”吗?Base
Derived
vector<B*>
附加问题:如果我使用指针作为容器类型(允许动态多态性),即等,它对 LSP 有影响吗?
注意:我尽量不依赖真正的 C++ 覆盖规则,但主要是想了解 LSP。我没有override
故意使用关键字。首先我想了解 LSP,然后我可以尝试 C++ 是否支持这些规则。