Bài giảng Lập trình hướng đối tượng - Chương 5: Phương thức ảo và tính đa hình
Số trang: 38
Loại file: ppt
Dung lượng: 236.50 KB
Lượt xem: 8
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Sau khi tham khảo bài giảng Lập trình hướng đối tượng - Chương 5: Phương thức ảo và tính đa hình sẽ giúp người tham khảo hiểu thêm về 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 tuý.
Nội dung trích xuất từ tài liệu:
Bài giảng 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 5Phương thức ảo và tính đa hình5.1 Bài toán quản lý một danh sách các đ ối tượng khác kiểu5.2 Vùng chọn kiểu5.3 Phương thức ảo5.4 Phương thức thiết lập ảo5.5 Phương thức ảo thuần tuý 15.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. 2 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. 3 Dùng vùng chọn kiểuclass Nguoi{protected: char *HoTen; int NamSinh;public: Nguoi(char *ht, int ns):NamSinh(ns) {HoTen = strdup(ht);} ~Nguoi() {delete [] HoTen;} void An() const { cout Dùng vùng chọn kiểuclass 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 Dùng vùng chọn kiểuclass CongNhan : public Nguoi{protected: double MucLuong;public: CongNhan(char *n, double ml, int ns) : Nguoi(n,ns), MucLuong(ml) { } void Xuat() const { cout Dùng vùng chọn kiểuconst 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 Dùng vùng chọn kiểu Xuất liệu cho đoạn chương trình trê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 Tất cả mọi đối tượng đều được quan điểm như người vì thao tác được thực hiện thông qua con trỏ đến lớp Người. Để bảo đảm xuất liệu tương ứng với đối tượng, phải có cách nhận diện đối tượng, ta thêm một vùng dữ liệu vào lớp cơ sở để nhận diện, vùng này có giá trị phụ thuộc vào loại của đối tượng và được gọi là vùng chọn kiểu. Các đối tượng thuộc lớp người có cùng giá trị cho vùng chọn kiểu, các đối tượng thuộc lớp sinh viên có giá trị của vùng chọn kiểu khác của lớp người. 8 Dùng vùng chọn kiểuclass 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 Dùng vùng chọn kiểuclass 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 Dùng vùng chọn kiể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 Dùng vùng chọn kiểuvoid 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 Dùng vùng chọn kiể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, m ...
Nội dung trích xuất từ tài liệu:
Bài giảng 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 5Phương thức ảo và tính đa hình5.1 Bài toán quản lý một danh sách các đ ối tượng khác kiểu5.2 Vùng chọn kiểu5.3 Phương thức ảo5.4 Phương thức thiết lập ảo5.5 Phương thức ảo thuần tuý 15.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. 2 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. 3 Dùng vùng chọn kiểuclass Nguoi{protected: char *HoTen; int NamSinh;public: Nguoi(char *ht, int ns):NamSinh(ns) {HoTen = strdup(ht);} ~Nguoi() {delete [] HoTen;} void An() const { cout Dùng vùng chọn kiểuclass 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 Dùng vùng chọn kiểuclass CongNhan : public Nguoi{protected: double MucLuong;public: CongNhan(char *n, double ml, int ns) : Nguoi(n,ns), MucLuong(ml) { } void Xuat() const { cout Dùng vùng chọn kiểuconst 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 Dùng vùng chọn kiểu Xuất liệu cho đoạn chương trình trê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 Tất cả mọi đối tượng đều được quan điểm như người vì thao tác được thực hiện thông qua con trỏ đến lớp Người. Để bảo đảm xuất liệu tương ứng với đối tượng, phải có cách nhận diện đối tượng, ta thêm một vùng dữ liệu vào lớp cơ sở để nhận diện, vùng này có giá trị phụ thuộc vào loại của đối tượng và được gọi là vùng chọn kiểu. Các đối tượng thuộc lớp người có cùng giá trị cho vùng chọn kiểu, các đối tượng thuộc lớp sinh viên có giá trị của vùng chọn kiểu khác của lớp người. 8 Dùng vùng chọn kiểuclass 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 Dùng vùng chọn kiểuclass 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 Dùng vùng chọn kiể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 Dùng vùng chọn kiểuvoid 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 Dùng vùng chọn kiể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, m ...
Tìm kiếm theo từ khóa liên quan:
Lập trình hướng đối tượng Bài giảng Lập trình hướng đối tượng Phương thức ảo Tính đa hình Vùng chọn kiểu Phương thức thiết lập ảoGợi ý tài liệu liên quan:
-
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 275 0 0 -
101 trang 200 1 0
-
14 trang 134 0 0
-
Giáo trình lập trình hướng đối tượng - Lê Thị Mỹ Hạnh ĐH Đà Nẵng
165 trang 112 0 0 -
Giáo trình Lập trình Windows 1 - Trường CĐN Đà Lạt
117 trang 96 0 0 -
Giáo trình Phân tích, thiết kế hướng đối tượng với UML: Phần 1 - Trường ĐH Công nghiệp Quảng Ninh
111 trang 95 0 0 -
265 trang 80 0 0
-
Giáo trình Lập trình hướng đối tượng với Java: Phần 2 - Trần Thị Minh Châu, Nguyễn Việt Hà
141 trang 75 0 0 -
33 trang 69 0 0
-
Ngôn ngữ lập trình C# 2005 - Tập 3: Lập trình hướng đối tượng (Phần 1)
196 trang 51 0 0