1
Chương 5
Phương th c o vành đa hình
5.1 Bài toán qu n lý m t danh sách các đ
i t ư ng khác ki u
5.2 Vùng ch n ki u
5.3 Phương th c o
5.4 Phương th c thi t l p o ế
5.5 Phương th c o thu n tu ý
2
5.1 Bài toán qu n lý m t danh sách các đ i t ư ng khác
ki u
-Gi s ta c n qu n lý m t danh ch các đ i t ư ng ki u
có th khác nhau, ta c n gi i quy t hai v n ế đ : Cách lưu tr
và thaoc x .
-Xét trưng h p c th , c đ i t ư ng th ng ư i, sinh
viên ho c công nhân.
-V l ưu tr : Ta có th ng union, trong tr ư ng h p y m i
đ i t ư ng ph i ch th ư c ch a đưc đ i t ư ng ch
thưc l n nh t. Đi u y y lãng phí không gian l ưu tr .
M t ch thay th l ế ưu tr đ i t ư ng b ng đúng kích thưc
c a nó và dùng m t danh sách (m ng, dslk,...) c con tr đ
qu ncác đ i t ư ng.
-V thaoc, ph i tho yêu c u đa hình: Thao tác ho t đ ng
khác nhau ng v i c lo i đ i t ư ng khác nhau. hai ch
gi i quy t là ế vùng ch n ki u và phương th c o .
3
5.2 Dùng vùng ch n ki u
V l ưu tr : Ta s ng m t m ng các con tr đ n l p cế ơ s
đ th tr đ n các ếđ i t ư ng thu c l p con.
Xét l p Ng ư i và các l p k th a sinh viên và công nhân. ế
Thao tác ta quan tâm xuat. Ta c n b o đ m thao tác xu t áp
d ng cho l p sinh viên và l p công nn kc nhau.
4
Dùng vùng ch n ki u
class Nguoi
{
protected:
char *HoTen;
int NamSinh;
public:
Nguoi(char *ht, int ns):NamSinh(ns) {HoTen =
strdup(ht);}
~Nguoi() {delete [] HoTen;}
void An() const { cout << HoTen << " an 3 chen
com";}
void Ngu() const { cout << HoTen << " ngu ngay
8 tieng";}
void Xuat() const { cout << "Nguoi, ho ten: "
<< HoTen << " sinh " << NamSinh; }
};
5
Dùng vùng ch n ki u
class SinhVien : public Nguoi
{
protected:
char *MaSo;
public:
SinhVien(char *n, char *ms, int ns) :
Nguoi(n,ns) { MaSo = strdup(ms);}
~SinhVien() {delete [] MaSo;}
void Xuat() const { cout << "Sinh vien " <<
HoTen << ", ma so " << MaSo;}
};
class NuSinh : public SinhVien
{
public:
NuSinh(char *ht, char *ms, int ns) :
SinhVien(ht,ms,ns) {}
void An() const { cout << HoTen << " ma so " <<
MaSo << " an 2 to pho";}
};