Các thành viên ảo - Đa hình
Số trang: 8
Loại file: pdf
Dung lượng: 175.95 KB
Lượt xem: 17
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Các thành viên ảo. Đa hình.Để có thể hiểu được phần này bạn cần hiểu rõ về cách sử dụng con trỏ và thừa kế giữa các lớp. Nếu có vài biểu thức nào có vẻ lạ lùng với bạn, bạn có thể xem lại các phần sau: int a::b(c) {}; // Các lớp (Bài 4.1) a-b // Con trỏ và đối tượng (Bài 4.2) class a: public b; // Quan hệ giữa các lớp(Bài 4.3) Con trỏ tới lớp cơ sở Một trong những lợi thế lớn của việc thừa kế các lớp là một con trỏ trỏ tới...
Nội dung trích xuất từ tài liệu:
Các thành viên ảo - Đa hình Các thành viên ảo. Đa hình. Để có thể hiểu được phần này bạn cần hiểu rõ về cách sử dụng con trỏ và thừa kế giữa các lớp. Nếu có vài biểu thức nào có vẻ lạ lùng với bạn, bạn có thể xem lại các phần sau: int a::b(c) {}; // Các lớp (Bài 4.1) a->b // Con trỏ và đối tượng (Bài 4.2) class a: public b; // Quan hệ giữa các lớp(Bài 4.3)Con trỏ tới lớp cơ sởMột trong những lợi thế lớn của việc thừa kế các lớp là một con trỏ trỏ tới mộtlớp được thừa kế là tương thích về kiểu với một con trỏ trỏ tới lớp cơ sở củanó. Bài này sẽ đề cập đầy đủ đến việc tận dụng tính năng mạnh mẽ này của C++.Ví dụ, chúng ta sẽ viết lại chương trình của chúng ta về hình chữ nhật và hình tamgiác trong chương trước để xem xét tính năng này:// con trỏ tới lớp cơ sở 20#include 10class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} };class CRectangle: publicCPolygon { public: int area (void) { return (width *height); } };class CTriangle: publicCPolygon { public: int area (void) { return (width *height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 =▭ CPolygon * ppoly2 =&trgl; ppoly1->set_values(4,5); ppoly2->set_values(4,5); cout Nếu muốn khai báo một phần tử trong một lớp mà chúng ta muốn định nghĩa lạinó trong các lớp thừa kế thì chúng ta phải đặt trước nó từ khoá virtual để việcsử dụng con trỏ tới các đối tượng thuộc lớp này là thích hợp.Hãy xem ví dụ sau:// các thành viên ảo 20#include 10 0class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} virtual int area(void) { return (0); } };class CRectangle: publicCPolygon { public: int area (void) { return (width *height); } };class CTriangle: publicCPolygon { public: int area (void) { return (width *height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon poly; CPolygon * ppoly1 =▭ CPolygon * ppoly2 =&trgl; CPolygon * ppoly3 =&poly; ppoly1->set_values(4,5); ppoly2->set_values(4,5); ppoly3->set_values(4,5); cout area()// abstract class CPoligonclass CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area (void) =0; };Hãy chú ý cách chúng ta thêm =0 vào virtual int area (void) thay vìđịnh nghĩa đầy đủ cho hàm. Kiểu hàm này có tên là là pure virtual function (hàmảo thuần tuý) và tất cả các lớp chứa bất kì một hàm ảo thuần tuý nào đều được coilà lớp trừu tượng cơ sở.Sự khác biệt lớn của một lớp trừu tượng cơ sở là không thể tạo được các đối tượngthuộc lớp. Nhưng chúng ta có thể tạo các con trỏ trỏ đến chúng. Vì vậy một khaibáo như sau:CPolygon poly;sẽ là không hợp lệ cho lớp trừu tượng cơ sở được khai báo ở trên. Tuy nhiên contrỏ:CPolygon * ppoly1;CPolygon * ppoly2là hoàn toàn hợp lệ. Có điều này vì hàm trừu tượng thuần tuý mà nó có khôngđược định nghĩa và không thể toạ được một đối tượng nếu như chưa định nghĩa tấtcả các thành viên của nó. Tuy nhiên một con trỏ trỏ tới một đối tượng thuộc lớpthừa kế mà hàm này đã được định nghĩa là hoàn toàn hợp lệ.Dưới đây chúng ta có một ví dụ đầy đủ:// các thành viên ảo. 20#include 10class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} virtual int area(void) =0; };class CRectangle: publicCPolygon { public: int area (void) { return (width *height); } };class CTriangle: publicCPolygon { public: int area (void) { return (width *height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 =▭ CPolygon * ppoly2 =&trgl; ppoly1->set_values(4,5); ppoly2->set_values(4,5); cout area()CPolygon có khả năng in ra màn hình kết quả của hàm area() mà không phụthuộc vào lớp được thừa kế là lớp nào.// ejemplo miembros 20virtuales 10#include class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} virtual int area(void) =0; void printarea (void) { cout area() CPolygon * ppoly2 =&trgl; ppoly1->set_values(4,5); ppoly2->set_values(4,5); ppoly1->printarea(); ppoly2->printarea(); return 0;}Hãy nhớ rằng this biểu diễn một con trỏ trỏ đến đối tượng đang được thực hiện.Các lớp trừu tượng và các thành viên ảo cung cấp cho C++ tính năng đa hìnhkhiến ...
Nội dung trích xuất từ tài liệu:
Các thành viên ảo - Đa hình Các thành viên ảo. Đa hình. Để có thể hiểu được phần này bạn cần hiểu rõ về cách sử dụng con trỏ và thừa kế giữa các lớp. Nếu có vài biểu thức nào có vẻ lạ lùng với bạn, bạn có thể xem lại các phần sau: int a::b(c) {}; // Các lớp (Bài 4.1) a->b // Con trỏ và đối tượng (Bài 4.2) class a: public b; // Quan hệ giữa các lớp(Bài 4.3)Con trỏ tới lớp cơ sởMột trong những lợi thế lớn của việc thừa kế các lớp là một con trỏ trỏ tới mộtlớp được thừa kế là tương thích về kiểu với một con trỏ trỏ tới lớp cơ sở củanó. Bài này sẽ đề cập đầy đủ đến việc tận dụng tính năng mạnh mẽ này của C++.Ví dụ, chúng ta sẽ viết lại chương trình của chúng ta về hình chữ nhật và hình tamgiác trong chương trước để xem xét tính năng này:// con trỏ tới lớp cơ sở 20#include 10class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} };class CRectangle: publicCPolygon { public: int area (void) { return (width *height); } };class CTriangle: publicCPolygon { public: int area (void) { return (width *height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 =▭ CPolygon * ppoly2 =&trgl; ppoly1->set_values(4,5); ppoly2->set_values(4,5); cout Nếu muốn khai báo một phần tử trong một lớp mà chúng ta muốn định nghĩa lạinó trong các lớp thừa kế thì chúng ta phải đặt trước nó từ khoá virtual để việcsử dụng con trỏ tới các đối tượng thuộc lớp này là thích hợp.Hãy xem ví dụ sau:// các thành viên ảo 20#include 10 0class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} virtual int area(void) { return (0); } };class CRectangle: publicCPolygon { public: int area (void) { return (width *height); } };class CTriangle: publicCPolygon { public: int area (void) { return (width *height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon poly; CPolygon * ppoly1 =▭ CPolygon * ppoly2 =&trgl; CPolygon * ppoly3 =&poly; ppoly1->set_values(4,5); ppoly2->set_values(4,5); ppoly3->set_values(4,5); cout area()// abstract class CPoligonclass CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area (void) =0; };Hãy chú ý cách chúng ta thêm =0 vào virtual int area (void) thay vìđịnh nghĩa đầy đủ cho hàm. Kiểu hàm này có tên là là pure virtual function (hàmảo thuần tuý) và tất cả các lớp chứa bất kì một hàm ảo thuần tuý nào đều được coilà lớp trừu tượng cơ sở.Sự khác biệt lớn của một lớp trừu tượng cơ sở là không thể tạo được các đối tượngthuộc lớp. Nhưng chúng ta có thể tạo các con trỏ trỏ đến chúng. Vì vậy một khaibáo như sau:CPolygon poly;sẽ là không hợp lệ cho lớp trừu tượng cơ sở được khai báo ở trên. Tuy nhiên contrỏ:CPolygon * ppoly1;CPolygon * ppoly2là hoàn toàn hợp lệ. Có điều này vì hàm trừu tượng thuần tuý mà nó có khôngđược định nghĩa và không thể toạ được một đối tượng nếu như chưa định nghĩa tấtcả các thành viên của nó. Tuy nhiên một con trỏ trỏ tới một đối tượng thuộc lớpthừa kế mà hàm này đã được định nghĩa là hoàn toàn hợp lệ.Dưới đây chúng ta có một ví dụ đầy đủ:// các thành viên ảo. 20#include 10class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} virtual int area(void) =0; };class CRectangle: publicCPolygon { public: int area (void) { return (width *height); } };class CTriangle: publicCPolygon { public: int area (void) { return (width *height / 2); } };int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 =▭ CPolygon * ppoly2 =&trgl; ppoly1->set_values(4,5); ppoly2->set_values(4,5); cout area()CPolygon có khả năng in ra màn hình kết quả của hàm area() mà không phụthuộc vào lớp được thừa kế là lớp nào.// ejemplo miembros 20virtuales 10#include class CPolygon { protected: int width, height; public: void set_values (inta, int b) { width=a; height=b;} virtual int area(void) =0; void printarea (void) { cout area() CPolygon * ppoly2 =&trgl; ppoly1->set_values(4,5); ppoly2->set_values(4,5); ppoly1->printarea(); ppoly2->printarea(); return 0;}Hãy nhớ rằng this biểu diễn một con trỏ trỏ đến đối tượng đang được thực hiện.Các lớp trừu tượng và các thành viên ảo cung cấp cho C++ tính năng đa hìnhkhiến ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin kỹ thuật lập trình quản trị mạng tin học máy tính Các thành viên ảo - Đa hìnhTài liệu liên quan:
-
52 trang 433 1 0
-
24 trang 358 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 319 0 0 -
74 trang 303 0 0
-
96 trang 297 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 291 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 284 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 277 0 0 -
Tài liệu hướng dẫn sử dụng thư điện tử tài nguyên và môi trường
72 trang 269 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0