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ớpTraiCay
đó chính là tính kế thừa - Lớp
TraiCai
vàXoai
có phương thứcbanTenGi
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)