Polymorphism là gì

Trong bài xích trước, họ hiểu được đà như thế nào làtính kế thừavào OOP. Ở bài xích này họ đã bài viết liên quan một tính chất nữa của thiết kế hướng đối tượng người dùng chính là tính nhiều hình nhé.

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

quý khách hàng đang xem: Polymorphism là gì

Tính đa hình là gì ?

Sự kế thừa trong C++ cho phép gồm sự tương xứng giữa lớp cửa hàng cùng những lớp dẫn xuất trong sơ đồ vật vượt kế:

Một bé trỏ có phong cách lớp các đại lý luôn có thể trỏ đến liên quan của một đối tượng người dùng của lớp dẫn xuất.Tuy nhiên, khi triển khai lời Call một cách làm của lớp, trình biên dịch đang quyên tâm mang đến dạng hình của bé trỏ chứ chưa hẳn đối tượng người tiêu dùng cơ mà nhỏ trỏ đã trỏ tới: cách tiến hành của lớp mà nhỏ trỏ có kiểu dáng được Gọi chứ chưa phải cách thức của đối tượng người tiêu dùng mà lại nhỏ trỏ đang trỏ tới được Hotline.

Ví dụ:Lớp mayAcer thừa kế từ lớp Mayvitinc, cả nhị lớp này đông đảo quan niệm phương thức show()

class Mayvitinh{ public: void show(){ cout lúc ấy, nếu ta knhì báo một nhỏ trỏ lớp mayAcer, dẫu vậy lại trỏ vào liên tưở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ì lịch trình đã hotline mang lại phương thức show() của lớp Mayvitinc, mà ko Hotline tới phương thức show() của lớp mayAcer.Để xử lý vụ việc này, chúng ta bắt buộc thực hiện cho tính nhiều hình trong Lập trình phía đối tượng người sử dụng. Mình đang giải thích chi tiết hơn làm việc bên dưới.

Đa hình (polymorphism)tức thị có nhiều hình dáng khác biệt. Tiêu biểu là, đa hình xuất hiện thêm lúc tất cả một kết cấu level của các lớp cùng bọn chúng liên quan với nhau vày tính kế thừa.

Mình mang một ví dụ thực vậy nhé:Một bạn cùng một cơ hội hoàn toàn có thể bao gồm Điểm lưu ý không giống nhau. Giống như một bạn đàn học sinh thời là một trong những tín đồ nam nhi, một fan chúng ta, một bạn anh. Vì vậy, và một fan mua đa số hành vi khác biệt trong số tình huống không giống nhau. Vấn đề này được gọi là đa hình.

Đa hình được xem như là một trong số những kĩ năng quan trọng của Lập trình phía đối tượng người tiêu dùng.

Các nhiều loại nhiều hình:

Tính nhiều hình đa phần được phân thành hai loại:

Compile time Polymorphism.Runtime Polymorphism.


*

1. Compile time Polymorphism:

Tính nhiều hình này được thực hiện bằng phương pháp hấp thụ ck hàm hoặc hấp thụ chồng toán thù tử.

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

Nạp ông xã hàm

Nạp chồng hàm (Function Overloading)cho phép thực hiện và một tên thường gọi cho những hàm “kiểu như nhau” (có thuộc mục đích). Nhưng khác nhau về kiểu dữ liệu tmê say số hoặc con số tđắm say số.

Chúng ta lấy ví dụ:

#include using namespace std; class inDuLieu { public: void hamIn(int i) { cout Biên dịch công tác ta gồm kết quả:

Trong ví dụ trên, ta chỉ cần sử dụng một hàm nhất có tên làhamIn()tuy vậy có thể dùng được mang lại 3 trường hợp khác biệt. Đây là một trong diễn đạt của tính đa hình.

Xem thêm: Mẹo Và Công Cụ Kiểm Tra Phần Cứng Máy Tính Hiệu Quả, Mẹo Và Công Cụ Kiểm Tra Lỗi Phần Cứng Máy Tính

Nạp ck toán tử

Nạp ông chồng tân oán tử (Operator Overloading) được dùng để làm có mang tân oán tử cho có sẵn vào c++ Giao hàng đến dữ liệu riêng bởi vì bạn tạo nên.

Giả sử gồm lớpPhanSocùng có những thủ tục tính toán thù như Cong, Tru, Nhan, Chia.Nếu chạm chán một biểu thức phức hợp, con số phxay tính nhiều thì Việc áp dụng các cách làm trên khá trở ngại với có thể gây phá cho những người thiết kế. Vì nắm ta sẽ nạp ck lại các tân oán tử nhằm có thể chế tạo một cái nhìn trực quan tiền vào code, sút tphát âm các lỗi sai ko đáng gồm.

Các toán thù tử có thể nạp chồng


*

Các tân oán tử bắt buộc hấp thụ chồng:

..*::?:

Ví dụ:

#include using namespace std;class Box public: double tinhTheTich(void) return chieudai * 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 dai cua mot box double chieurong; // Chieu rong cua mot box double chieucao; // Chieu cao cua mot box;// ham mê main cua chuong trinhint main( ){ Box Box1; // Knhị bao Box1 la cua kieu Box Box Box2; // Khai 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 đưa ra tiet cua box 1 Box1.setChieuDai(5); Box1.setChieuRong(2); Box1.setChieuCao(4); // thong tin chi tiet cua box 2 Box2.setChieuDai(7); Box2.setChieuRong(6); Box2.setChieuCao(9); // the tich cua box 1 thetich = Box1.tinhTheTich(); cout Sau Khi chạy công tác cho kết quả:

Trong ví dụ trên, ta đang hấp thụ ông xã lại tân oán tử cùng. Tính đa hình được diễn đạt qua việc nạp chồng nhằm tính tổng Box1 cùng Box2.

2. Runtime Polymorphism:

Các bàn còn lưu giữ ví dụ thứ nhất của bài bác ko.

#include using namespace std;class Mayvitinh{ public: void show() cout show(); Có thể thấy chương trình sau khoản thời gian chạy sẽGọi cho cách làm show() của lớp Mayvitinch, nhưng ko Gọi cho tới cách thức show() của lớp mayAcer.

Vậy để chương trình call cho tới phương thức 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 Khi biên dịch chương trình sẽ có kết quả:

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

Khi knhị báo hàm ảo cùng với tự khóavirtualtức là hàm này sẽ được Điện thoại tư vấn theo một số loại đối tượng người dùng được trỏ (hoặc tyêu thích chiếu), chđọng chưa phải theo một số loại của nhỏ trỏ (hoặc tđắm đuối chiếu). Và điều đó dẫn đến tác dụng khác nhau:

Nếu không khai báo hàm ảovirtualtrình biên dịch vẫn Hotline hàm tại lớp clàm việc sởNếu sử dụng hàm ảovirtualtrình biên dịch vẫn gọi hàm tại lớp dẫn xuất

Lúc nhận biết có khai báovirtualtrong lớp đại lý, trình biên dịch đã chế tạo mỗi đối tượng người tiêu dùng của lớp các đại lý cùng các lớp dẫn xuất của nó một con trỏ chỉ mang đến bảng cách thức ảo (virtual function table). Con trỏ kia mang tên là vptr (virtual pointer). Bảng cách làm ảo là khu vực đựng các bé trỏ chỉ mang lại đoạn chương trình đã biên dịch ứng cùng với những thủ tục ảo. Mỗi lớp tất cả một bảng cách tiến hành ảo. Trình biên dịch chỉ lập bảng cách tiến hành ảo Khi ban đầu gồm vấn đề chế tạo ra đối tượng người sử dụng của lớp. Đến lúc lịch trình chạy, cách thức ảo của đối tượng người tiêu dùng new được nối kết cùng thực hành trải qua con trỏ vptr.

Xem thêm: Sàn Upcom (Unlisted Public Company Market, Sàn Upcom Là Gì

Kết

Nếu các bạn có thắc mắc xuất xắc câu hỏi gì rất có thể comment cùng rate dưới nội dung bài viết. Mình mong muốn sẽ cảm nhận sự cỗ vũ của các bạn Một trong những bài khác với chủ đề không giống.


Chuyên mục: Blockchain