共変的についてなのですが参考書のほうに説明があるのですがさっぱりわかりませんので
わかりやすく説明していただけますでしょうか?(新版明解c++中級編)

関数derived::fが関数base::fをオーバーライドしているとき、以下に示す全条件が成立すること。

  1. 両者の返却値型が、クラスへのポインタか参照であること。
  2. base::fの返却値型のクラスがderived::fの返却値の型のクラスと同じであるかまたは、それがderived::fの返却値の型のクラスの、あいまい性がなくてアクセス可能な、直接もくは間接の基底クラスとなっている、
  3. ポインタまたは参照が同一のcv修飾を持ち、derived::fの返却値のクラス型のcv修飾がbase::fの返却値のクラス型のcv修飾より多くない(cv修飾はconstとvolatile)
class t {
public:
    virtual t* f() const = 0;
    t(){ }
};

class tA : public t {
private:

public:
    virtual tA* f()const { cout << "tA\n"; return new tA; }
    tA(){ }
};

class tB : public t {
public:
    virtual t* f()const {
        cout << "tb\n";
        return new tB;
    }
    tB() { }
};