POLYMORPHISM LÀ GÌ

  -  

Trong bài xích trước, bọn họ gọi được đà làm sao làtính kế thừatrong OOPhường. Ở bài xích này họ vẫn xem thêm một đặc thù nữa của thiết kế hướng đối tượng người dùng chính là tính đa hình nhé.

Bạn đang xem: Polymorphism là gì

Bạn đang xem: Polymorphism là gì

Tính nhiều hình là gì ?

Sự kế thừa vào C++ chất nhận được có sự tương ứng thân lớp cơ sở và những lớp dẫn xuất trong sơ vật dụng quá kế:

Một nhỏ trỏ gồm hình dạng lớp đại lý luôn luôn có thể trỏ mang đến địa chỉ của một đối tượng người dùng của lớp dẫn xuất.Tuy nhiên, Lúc triển khai lời call một cách làm của lớp, trình biên dịch sẽ quan tâm mang đến hình dạng của nhỏ trỏ chứ không hẳn đối tượng nhưng nhỏ trỏ sẽ trỏ tới: cách làm của lớp nhưng mà nhỏ trỏ gồm đẳng cấp được Hotline chứ đọng không phải cách tiến hành của đối tượng người tiêu dùng mà lại bé trỏ sẽ trỏ cho tới được Hotline.

Ví dụ:Lớp mayAcer thừa kế tự lớp Mayvitinc, cả hai lớp này đa số định nghĩa cách tiến hành show()

class Mayvitinh{ public: void show(){ cout khi ấy, trường hợp ta khai báo một nhỏ trỏ lớp mayAcer, dẫu vậy lại trỏ vào tác động của một đối tượng người tiêu dùng lớp Mayvitinh:

mayAcer may1; Mayvitinch *tenmay = &may1;tenmay->show(); thì chương trình vẫn call mang lại phương thức show() của lớp Mayvitinch, mà ko Call cho tới cách tiến hành show() của lớp mayAcer.Để xử lý sự việc này, họ phải sử dụng mang đến tính nhiều hình vào Lập trình hướng đối tượng. Mình đã giải thích chi tiết hơn ở bên dưới.

Đa hình (polymorphism)tức thị có không ít hình dáng khác biệt. Tiêu biểu là, nhiều hình mở ra khi tất cả một kết cấu level của các lớp cùng chúng tương quan với nhau bởi vì tính thừa kế.

Mình lấy một ví dụ thực ráng nhé:Một bạn và một cơ hội rất có thể tất cả điểm lưu ý khác biệt. Giống nhỏng một tín đồ bầy học sinh thời là một fan con trai, một người chúng ta, một fan anh. Vì vậy, cùng một tín đồ cài đông đảo hành động khác nhau trong số tình huống khác nhau. Điều này được Hotline là nhiều hình.

Đa hình được xem là một giữa những tài năng quan trọng đặc biệt của Lập trình phía đối tượng người dùng.

Các một số loại nhiều hình:

Tính đa hình chủ yếu được phân thành nhì loại:

Compile time Polymorphism.Runtime Polymorphism.


*

1. Compile time Polymorphism:

Tính nhiều hình này được sử dụng bằng cách nạp ck hàm hoặc nạp ck toán tử.

Vậy hấp thụ ông chồng hàm và hấp thụ chồng toán thù tử là gì?

Nạp ck hàm

Nạp ông chồng hàm (Function Overloading)cho phép thực hiện cùng một tên gọi cho những hàm “tương đương nhau” (tất cả cùng mục đích). Nhưng khác biệt về phong cách dữ liệu tyêu thích số hoặc số lượng tham mê số.

Chúng ta rước ví dụ:

#include using namespace std; class inDuLieu { public: void hamIn(int i) { cout Biên dịch lịch trình ta tất cả kết quả:

Trong ví dụ bên trên, ta chỉ cần sử dụng một hàm độc nhất mang tên làhamIn()nhưng mà hoàn toàn có thể sử dụng được mang lại 3 trường hợp không giống nhau. Đây là 1 trong những bộc lộ của tính nhiều hình.

Xem thêm: Các Hồ Lớn Nhất Việt Nam Ở Đâu? Các Hồ Nước Ngọt Lớn Nhất Việt Nam

Nạp chồng tân oán tử

Nạp chồng tân oán tử (Operator Overloading) được dùng để định nghĩa toán thù tử cho tất cả sẵn trong c++ phục vụ mang lại dữ liệu riêng biệt bởi vì các bạn tạo thành.

Giả sử gồm lớpPhanSovà có các cách làm tính toán nlỗi Cong, Tru, Nhan, Chia.Nếu chạm mặt một biểu thức phức hợp, số lượng phép tính những thì vấn đề thực hiện những phương thức trên tương đối khó khăn với có thể gây phá cho tất cả những người lập trình sẵn. Vì vậy ta vẫn hấp thụ ck lại những toán tử để hoàn toàn có thể tạo một chiếc chú ý trực quan vào code, bớt thiểu các lỗi sai không đáng gồm.

Các toán thù tử hoàn toàn có thể hấp thụ chồng


*

Các toán thù tử tất yêu hấp thụ chồng:

..*::?:

Ví dụ:

#include using namespace std;class Box public: double tinhTheTich(void) return chieudẻo * chieurong * chieucao; void setChieuDai( double dẻo ) chieudẻo = dai; void setChieuRong( double rong ) chieurong = rong; void setChieuCao( double cao ) chieucao = cao; // Nap chong toa tu + de cong nhì doi tuong Box. Box operator+(const Box& b) Box box; box.chieudẻo = this->chieudẻo + b.chieudai; box.chieurong = this->chieurong + b.chieurong; box.chieucao = this->chieucao + b.chieucao; return box; private: double chieudai; // chieu dẻo cua mot box double chieurong; // Chieu rong cua mot box double chieucao; // Chieu cao cua mot box;// đê mê main cua chuong trinhint main( ){ Box Box1; // Khai bao Box1 la cua kieu Box Box Box2; // Knhì bao Box2 la cua kieu Box Box Box3; // Khai bao Box3 la cua kieu Box double thetich = 0.0; // Luu giu the tich cua mot box tai day // thong tin chi tiet cua box 1 Box1.setChieuDai(5); Box1.setChieuRong(2); Box1.setChieuCao(4); // thong tin bỏ ra tiet cua box 2 Box2.setChieuDai(7); Box2.setChieuRong(6); Box2.setChieuCao(9); // the tich cua box 1 thetich = Box1.tinhTheTich(); cout Sau Lúc chạy công tác mang đến kết quả:

Trong ví dụ trên, ta sẽ nạp ông xã lại toán thù tử cùng. Tính nhiều hình được trình bày qua vấn đề nạp chồng nhằm tính tổng Box1 với Box2.

2. Runtime Polymorphism:

Các bàn còn lưu giữ ví dụ trước tiên của bài bác ko.

#include using namespace std;class Mayvitinh{ public: void show() cout show(); Có thể thấy lịch trình sau khoản thời gian chạy sẽcall mang lại cách tiến hành show() của lớp Mayvitinh, mà lại ko điện thoại tư vấn tới thủ tục show() của lớp mayAcer.

Vậy để công tác Hotline cho tới cách làm show() của lớp mayAcer ta áp dụng hàm ảo virtual nlỗi sau:

#include using namespace std;class Mayvitinh{ public: virtual void show() cout show(); Sau Lúc biên dịch lịch trình sẽ có được kết quả:

Trong ví dụ bên trên tôi đã thêm tự khóavirtualvào hàmshow()vào lớp cơ sởMayvitinc.Từ khóavirtualnày dùng làm knhị báo một hàm là hàm ảo.

khi knhị báo hàm ảo cùng với từ khóavirtualnghĩa là hàm này sẽ được Điện thoại tư vấn theo nhiều loại đối tượng người dùng được trỏ (hoặc tđắm say chiếu), chđọng không hẳn theo một số loại của nhỏ trỏ (hoặc tsay đắm chiếu). Và điều này dẫn mang đến hiệu quả khác nhau:

Nếu ko knhì báo hàm ảovirtualtrình biên dịch sẽ Call hàm trên lớp csống sởNếu cần sử dụng hàm ảovirtualtrình biên dịch đã gọi hàm tại lớp dẫn xuất

lúc nhận biết tất cả knhị báovirtualvào lớp cửa hàng, trình biên dịch đang chế tạo từng đối tượng người tiêu dùng của lớp đại lý với các lớp dẫn xuất của chính nó một nhỏ trỏ chỉ đến bảng cách làm ảo (virtual function table). Con trỏ kia có tên là vptr (virtual pointer). Bảng cách thức ảo là địa điểm chứa những nhỏ trỏ chỉ mang lại đoạn lịch trình sẽ biên dịch ứng cùng với những thủ tục ảo. Mỗi lớp gồm một bảng cách tiến hành ảo. Trình biên dịch chỉ lập bảng cách làm ảo Khi bắt đầu bao gồm bài toán sinh sản đối tượng của lớp. Đến Lúc chương trình chạy, thủ tục ảo của đối tượng người tiêu dùng bắt đầu được nối kết cùng thực hiện trải qua bé trỏ vptr.

Xem thêm: Khách Sạn Dona Lê Hồng Phong, Quận 10, Thành Phố Hồ Chí Minh

Kết

Nếu các bạn có thắc mắc giỏi thắc mắc gì có thể comment và rate bên dưới nội dung bài viết. Mình hi vọng vẫn nhận được sự ủng hộ của chúng ta trong những bài không giống cùng với chủ thể khác.