Như vậy, điều kiện để xuất hiện tính đa hình là phải có tính kế thừa trước.

Ví dụ 1

#include <iostream>
#include <string>
using namespace std;

// Lop co so (Base class)
class TraiCay {
  public:
    void banTenGi() {
      cout << " Toi ten: Trai cay \n";
    }
};

// Lop dan xuat (Derived class)
class Xoai: public TraiCay {
  public:
    void banTenGi() {
      cout << " Toi ten: Xoai \n";
    }
};

int main() {
  TraiCay traiCay;
  Xoai xoai;
  traiCay.banTenGi();
  xoai.banTenGi();
  return 0;
}

Kết quả

Toi ten: Trai cay
Toi ten: Xoai

Tính đa hình xuất hiện vì đã thỏa 2 điều kiện

  • Lớp Xoai kế thừa từ lớp TraiCay đó chính là tính kế thừa
  • Lớp TraiCaiXoai có phương thức banTenGi trùng nhau

Ví dụ 2

#include <iostream>
#include <string>
using namespace std;

// Lop co so (Base class)
class DongVat {
  public:
    string ten = "Vang";
    void noi() {
      cout << "Meo va Cho co doi bung khong \n";
    }
};

// Lop dan xuat (Derived class)
class Meo : public DongVat {
  public:
    string ten = "Map";
    void noi() {
      cout << "Meo " << ten <<" noi: meo meo \n";
    }
};

// Lop dan xuat (Derived class)
class Cho : public DongVat {
  public:
    void noi() {
      cout << "Cho " << ten << " noi: gau gau \n";
    }
};

int main() {
  DongVat thuCung;
  Meo meo;
  Cho cho;

  thuCung.noi();
  meo.noi();
  cho.noi();
  
  meo.ten = "U";
  meo.noi();
  return 0;
}

Kết quả

Meo va Cho co doi bung khong 
Meo Map noi: meo meo 
Cho Vang noi: gau gau 
Meo U noi: meo meo 

Tại sao sử dụng Tính đa hình?

Tính kế thừa và Tính đa hình rất hữu ích cho việc tận dụng lại mã

HÃY NHỚ
"Không lặp lại chính mình"
(DRY - Don't Repeat Yourself)