intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng môn học Lập trình hướng đối tượng - Chương 5: Phương thức ảo và tính đa hình

Chia sẻ: Ngocnga Ngocnga | Ngày: | Loại File: PDF | Số trang:38

73
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Lập trình hướng đối tượng - Chương 5 trình bày các kiến thức về phương thức ảo và tính đa hình. Các nội dung chính trong chương này gồm: Bài toán quản lý một danh sách các đối tượng khác kiểu, vùng chọn kiểu, phương thức ảo, phương thức thiết lập ảo, phương thức ảo thuần túy. Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng môn học Lập trình hướng đối tượng - Chương 5: Phương thức ảo và tính đa hình

  1. Chöông 5 Phöông thöùc aûo vaø tính ña hình 5.1 Baøi toaùn quaûn lyù moät danh saùch caùc ñoái töôïng khaùc kieåu 5.2 Vuøng choïn kieåu 5.3 Phöông thöùc aûo 5.4 Phöông thöùc thieát laäp aûo 5.5 Phöông thöùc aûo thuaàn tuyù 1
  2. 5.1 Baøi toaùn quaûn lyù moät danh saùch caùc ñoái töôïng khaùc kieåu - Giaû söû ta caàn quaûn lyù moät danh saùch caùc ñoái töôïng coù kieåu coù theå khaùc nhau, ta caàn giaûi quyeát hai vaán ñeà: Caùch löu tröõ vaø thao taùc xöû lyù. - Xeùt tröôøng hôïp cuï theå, caùc ñoái töôïng coù theå laø ngöôøi, sinh vieân hoaëc coâng nhaân. - Veà löu tröõ: Ta coù theå duøng union, trong tröôøng hôïp naøy moãi ñoái töôïng phaûi coù kích thöôùc chöùa ñöôïc ñoái töôïng coù kích thöôùc lôùn nhaát. Ñieàu naøy gaây laõng phí khoâng gian löu tröõ. Moät caùch thay theá laø löu tröõ ñoái töôïng baèng ñuùng kích thöôùc cuûa noù vaø duøng moät danh saùch (maûng, dslk,...) caùc con troû ñeå quaûn lyù caùc ñoái töôïng. - Veà thao taùc, phaûi thoaû yeâu caàu ña hình: Thao taùc coù hoaït ñoäng khaùc nhau öùng vôùi caùc loaïi ñoái töôïng khaùc nhau. Coù hai caùch giaûi quyeát laø vuøng choïn kieåu vaø phöông thöùc aûo. 2
  3. 5.2 Duøng vuøng choïn kieåu  Veà löu tröõ: Ta seõ duøng moät maûng caùc con troû ñeán lôùp cô sôû ñeå coù theå troû ñeán caùc ñoái töôïng thuoäc lôùp con.  Xeùt lôùp Ngöôøi vaø caùc lôùp keá thöøa sinh vieân vaø coâng nhaân. Thao taùc ta quan taâm laø xuat. Ta caàn baûo ñaûm thao taùc xuaát aùp duïng cho lôùp sinh vieân vaø lôùp coâng nhaân khaùc nhau. 3
  4. Duøng vuøng choïn kieå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
  5. Duøng vuøng choïn kieå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
  6. Duøng vuøng choïn kieåu class CongNhan : public Nguoi { protected: double MucLuong; public: CongNhan(char *n, double ml, int ns) : Nguoi(n,ns), MucLuong(ml) { } void Xuat() const { cout
  7. Duøng vuøng choïn kieåu const int N = 4; void main() { Nguoi *a[N]; a[0] = new SinhVien("Vien Van Sinh", ”200001234", 1982); a[1] = new NuSinh("Le Thi Ha Dong", ”200001235", 1984); a[2] = new CongNhan("Tran Nhan Cong", 1000000, 1984); a[3] = new Nguoi("Nguyen Thanh Nhan", 1960); XuatDs(4,a); } 7
  8. Duøng vuøng choïn kieåu  Xuaát lieäu cho ñoaïn chöông trình treân nhö sau: Nguoi, ho ten: Vien Van Sinh sinh 1982 Nguoi, ho ten: Le Thi Ha Dong sinh 1984 Nguoi, ho ten: Tran Nhan Cong sinh 1984 Nguoi, ho ten: Nguyen Thanh Nhan sinh 1960  Taát caû moïi ñoái töôïng ñeàu ñöôïc quan ñieåm nhö ngöôøi vì thao taùc ñöôïc thöïc hieän thoâng qua con troû ñeán lôùp Ngöôøi.  Ñeå baûo ñaûm xuaát lieäu töông öùng vôùi ñoái töôïng, phaûi coù caùch nhaän dieän ñoái töôïng, ta theâm moät vuøng döõ lieäu vaøo lôùp cô sôû ñeå nhaän dieän, vuøng naøy coù giaù trò phuï thuoäc vaøo loaïi cuûa ñoái töôïng vaø ñöôïc goïi laø vuøng choïn kieåu.  Caùc ñoái töôïng thuoäc lôùp ngöôøi coù cuøng giaù trò cho vuøng choïn kieåu, caùc ñoái töôïng thuoäc lôùp sinh vieân coù giaù trò cuûa vuøng choïn kieåu khaùc cuûa lôùp ngöôøi. 8
  9. Duøng vuøng choïn kieåu class Nguoi { public: enum LOAI {NGUOI, SV, CN}; protected: char *HoTen; int NamSinh; public: LOAI pl; Nguoi(char *ht, int ns):NamSinh(ns), pl(NGUOI) {HoTen = strdup(ht);} ~Nguoi() {delete [] HoTen;} void An() const { cout
  10. Duøng vuøng choïn kieåu class SinhVien : public Nguoi { protected: char *MaSo; public: SinhVien(char *n, char *ms, int ns) : Nguoi(n,ns) { MaSo = strdup(ms); pl = SV;} ~SinhVien() {delete [] MaSo;} void Xuat() const { cout
  11. Duøng vuøng choïn kieåu class CongNhan : public Nguoi { protected: double MucLuong; public: CongNhan(char *n, double ml, int ns) : Nguoi(n,ns), MucLuong(ml) { pl = CN;} void Xuat() const { cout
  12. Duøng vuøng choïn kieåu void XuatDs(int n, Nguoi *an[]) { for (int i = 0; i < n; i++) { switch(an[i]->pl) { case Nguoi::SV: ((SinhVien *)an[i])->Xuat(); break; case Nguoi::CN: ((CongNhan *)an[i])->Xuat(); break; default: an[i]->Xuat(); break; } cout
  13. Duøng vuøng choïn kieåu const int N = 4; void main() { Nguoi *a[N]; a[0] = new SinhVien("Vien Van Sinh", "200001234", 1982); a[1] = new NuSinh("Le Thi Ha Dong", "200001235", 1984); a[2] = new CongNhan("Tran Nhan Cong", 1000000, 1984); a[3] = new Nguoi("Nguyen Thanh Nhan", 1960); XuatDs(4,a); }  Xuaát lieäu cuûa ñoaïn chöông trình treân seõ laø: Sinh vien Vien Van Sinh, ma so 200001234 Sinh vien Le Thi Ha Dong, ma so 200001235 Cong nhan, ten Tran Nhan Cong muc luong: 1000000 Nguoi, ho ten: Nguyen Thanh Nhan sinh 1960 13
  14. Duøng vuøng choïn kieåu 14
  15. Duøng vuøng choïn kieåu  Caùch tieáp caän treân giaûi quyeát ñöôïc vaán ñeà: Löu tröõ ñöôïc caùc ñoái töôïng khaùc kieåu nhau vaø thao taùc khaùc nhau töông öùng vôùi ñoái töôïng. Tuy nhieân noù coù caùc nhöôïc ñieåm sau: – Daøi doøng vôùi nhieàu switch, case. – Deã sai soùt, khoù söûa vì trình bieân dòch bò cô cheá eùp kieåu che maét. – Khoù naâng caáp ví duï theâm moät loaïi ñoái töôïng môùi, ñaëc bieät khi chöông trình lôùn.  Caùc nhöôïc ñieåm treân coù theå ñöôïc khaéc phuïc nhôø phöông thöùc aûo. 15
  16. 5.3 Phöông thöùc aûo  Con troû thuoäc lôùp cô sôû coù theå troû ñeán lôùp con: Nguoi* pn = new SinhVien(“Le Vien Sinh”, 200001234, 1982);  Ta mong muoán thoâng qua con troû thuoäc lôùp cô sôû coù theå truy xuaát haøm thaønh phaàn ñöôïc ñònh nghóa laïi ôû lôùp con: pn->Xuat(); // Mong muon: goi Xuat cua lop sinh // vien, thuc te: goi Xuat cua lop // Nguoi  Phöông thöùc aûo cho pheùp giaûi quyeát vaán ñeà. Ta qui ñònh moät haøm thaønh phaàn laø phöông thöùc aûo baèng caùch theâm töø khoaù virtual vaøo tröôùc khai baùo haøm.  Trong ví duï treân, ta theâm töø khoaù virtual vaøo tröôùc khai baùo cuûa haøm xuat. 16
  17. Phöông thöùc aûo 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
  18. Phöông thöùc aûo 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
  19. Phöông thöùc aûo class CongNhan : public Nguoi { protected: double MucLuong; public: CongNhan(char *n, double ml, int ns) : Nguoi(n,ns), MucLuong(ml) { } void Xuat() const { cout
  20. Phöông thöùc aûo const int N = 4; void main() { Nguoi *a[N]; a[0] = new SinhVien("Vien Van Sinh", "200001234", 1982); a[1] = new NuSinh("Le Thi Ha Dong", "200001235", 1984); a[2] = new CongNhan("Tran Nhan Cong", 1000000, 1984); a[3] = new Nguoi("Nguyen Thanh Nhan", 1960); XuatDs(4,a); }  Phöông thöùc aûo xuat ñöôïc khai baùo ôû lôùp Nguoi cho pheùp söû duïng con troû ñeán lôùp cô sôû (Nguoi) nhöng troû ñeán moät ñoái töôïng thuoäc lôùp con (Sinh vieân, coâng nhaân) goïi ñuùng thao taùc ôû lôùp con: 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2