在面向对象程序设计中，实例函数的协变返回值类型指的是子类中的成员函数的返回值类型不必严格等同与该函数所重写的父类中的函数的返回值类型，而可以是更 "狭窄" 的类型。在 C++ 程序设计中。这是一种常见的编程范式，如下面的例子：但是协变类型不能兼容于泛型，如使用到智能指针或泛型容器的场合，即如下的程序是不合法的：其原因是为了防止通过协变机制绕过类型机制，使得某个指针指向了一个不兼容类型的对象。如：
参见.协变与逆变