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
lượt xem 5
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Duøng vuøng choïn kieåu 14
- 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
- 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
- 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
- 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
- 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
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Đề cương bài giảng môn học Lập trình mạng
139 p | 609 | 250
-
Bài giảng môn học Lập trình hệ nhúng - Phạm Văn Thuận
113 p | 125 | 22
-
Bài giảng Công nghệ lập trình tiên tiến: Chương 0 - ĐH Công nghệ Đồng Nai
8 p | 145 | 11
-
Bài giảng Cơ sở lập trình 1: Giới thiệu môn học - Lê Quý Tài
9 p | 132 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 127 | 7
-
Bài giảng Ngôn ngữ lập trình C: Giới thiệu môn học - PhD. Nguyễn Thị Huyền
7 p | 56 | 7
-
Bài giảng môn học Cơ sở lập trình - ThS. Phạm Thanh An
4 p | 116 | 7
-
Bài giảng Ngôn ngữ lập trình: Tổng quan môn học - Lê Nguyễn Tuấn Thành
6 p | 140 | 6
-
Bài giảng Cơ sở lập trình: Giới thiệu môn học - Trịnh Tấn Đạt
15 p | 15 | 6
-
Bài giảng môn học Cơ sở lập trình
11 p | 97 | 6
-
Bài giảng Kỹ thuật lập trình - TS. Vũ Hương Giang
8 p | 117 | 5
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình: Giới thiệu môn học - TS. Vũ Thị Hương Giang
8 p | 26 | 4
-
Bài giảng Ngôn ngữ lập trình: Tổng quan môn học
6 p | 88 | 3
-
Bài giảng Kỹ thuật lập trình: Giới thiệu học phần - Trần Minh Thái (2017)
14 p | 59 | 3
-
Bài giảng Ngôn ngữ lập trình C: Giới thiệu môn học - TS. Nguyễn Thị Hiền
7 p | 52 | 2
-
Bài giảng Giới thiệu lập trình: Thông tin môn học - TS. Lê Nguyên Khôi
6 p | 70 | 2
-
Bài giảng Kỹ thuật lập trình: Mở đầu - TS. Vũ Hương Giang
8 p | 35 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn