
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 sách các ả ử ầ ả ộ đ i tố ư ng có ki u ợ ể
có th khác nhau, ta c n gi i quy t hai v n ể ầ ả ế ấ đ : ềCách lưu trữ
và thao tác x lýử.
-Xét trưng h p c th , các ờ ợ ụ ể đ i tố ư ng có th là ngợ ể ư i, sinh ờ
viên ho c công nhân.ặ
-V lề ưu tr :ữ Ta có th dùng union, trong trể ư ng h p này m i ờ ợ ỗ
đ i tố ư ng ph i có kích thợ ả ư c ch a ớ ứ đưc ợđ i tố ư ng có kích ợ
thưc l n nh t. Đi u này gây lãng phí không gian lớ ớ ấ ề ưu tr . ữ
M t cách thay th là 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ác con tr ủ ộ ả ỏ đ ể
qu n lý các ảđ i tố ư ng. ợ
-V thao tác, ph i tho yêu c u ề ả ả ầ đa hình: Thao tác có ho t ạđ ng ộ
khác nhau ng v i các lo i ứ ớ ạ đ i tố ư ng khác nhau. Có hai cá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 dùng m t m ng các con tr ẽ ộ ả ỏ đ n l p cế ớ ơ s ở
đ có 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 là 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 nhân khác 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";}
};