在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).
协变(covariant),如果它保持了子类型序关系≦。该序关系是:子类型≦基类型。
逆变(contravariant),如果它逆转了子类型序关系。
A function (B)
{
return C
}
D ret = function(F);
如上面所示 根据大筐装小筐理论
D只能是A或者A的父类,这就是返回值协变。已经有个小筐了,你要装他只能用大筐,不能用可以变小的小筐来装小筐,因此这个小筐不能支持变小,就是小筐要协变(大)。
F必须是B或者B的子类,这就是参数逆变。就是给你个大筐在那里放着,你要装只能装个可以变小的小筐进去,也就是放进去的筐可以变小,也就是大筐要逆变(小)。
原文:http://www.cnblogs.com/lsgxeva/p/7684545.html