Trong bài bác trước, chúng ta phát âm được đà nào làtính kế thừavào OOPhường. Ở bài bác này bọn họ sẽ đọc thêm một đặc điểm nữa của lập trình phía đối tượng người sử dụng đó là tính đa hình nhé.Bạn sẽ xem: Polymorphism là gì
Tính nhiều hình là gì ?
Sự thừa kế vào C++ cho phép bao gồm sự tương ứng thân lớp cơ sở và các lớp dẫn xuất vào sơ vật dụng thừa kế:
Một bé trỏ tất cả vẻ bên ngoài lớp cơ sở luôn có thể trỏ đến xúc tiến của một đối tượng người sử dụng của lớp dẫn xuất.Tuy nhiên, lúc thực hiện lời điện thoại tư vấn một phương thức của lớp, trình biên dịch đã quan tâm mang lại đẳng cấp của con trỏ chđọng chưa phải đối tượng người dùng mà bé trỏ đã trỏ tới: thủ tục của lớp cơ mà nhỏ trỏ bao gồm dạng hình được hotline chứ chưa phải cách làm của đối tượng người sử dụng nhưng mà con trỏ đã trỏ cho tới được Gọi.Bạn đang xem: Polymorphism là gì
Ví dụ:Lớp mayAcer kế thừa từ bỏ lớp Mayvitinch, cả hai lớp này các có mang cách tiến hành show()
class Mayvitinh{ public: void show(){ cout khi đó, ví như ta khai báo một con trỏ lớp mayAcer, tuy nhiên lại trỏ vào liên hệ của một đối tượng người dùng lớp Mayvitinh:
mayAcer may1; Mayvitinh *tenmay = &may1;tenmay->show(); thì chương trình đang hotline mang lại cách làm show() của lớp Mayvitinh, mà không điện thoại tư vấn tới phương thức show() của lớp mayAcer.Để giải quyết và xử lý sự việc này, chúng ta yêu cầu thực hiện mang đến tính đa hình trong Lập trình hướng đối tượng người tiêu dùng. Mình đã lý giải chi tiết rộng sinh hoạt dưới.
Đa hình (polymorphism)tức là có rất nhiều hình hài khác biệt. Tiêu biểu là, nhiều hình xuất hiện lúc có một kết cấu level của các lớp với chúng tương quan cùng nhau do tính kế thừa.
Mình rước một ví dụ thực gắng nhé:Một fan cùng một cơ hội có thể có Điểm sáng khác nhau. Giống như một tín đồ đàn học viên thời là một trong những tín đồ con trai, một bạn các bạn, một người anh. Vì vậy, và một bạn cài đặt đa số hành động khác biệt trong những tình huống khác biệt. Điều này được gọi là đa hình.
Đa hình được xem như là một Một trong những chức năng đặc trưng của Lập trình phía đối tượng người dùng.
Các loại đa hình:
Tính đa hình chủ yếu được tạo thành nhì loại:
Compile time Polymorphism.Runtime Polymorphism.
1. Compile time Polymorphism:
Tính đa hình này được sử dụng bằng cách nạp ông chồng hàm hoặc hấp thụ ông xã toán tử.
Vậy hấp thụ ông xã hàm cùng nạp ông chồng toán thù tử là gì?
Nạp ông chồng hàmNạp ông xã hàm (Function Overloading)có thể chấp nhận được thực hiện và một tên gọi cho những hàm “giống nhau” (gồm cùng mục đích). Nhưng khác nhau về mẫu mã tài liệu tmê mệt số hoặc con số tmê mệt số.
Chúng ta rước ví dụ:
#include using namespace std; class inDuLieu { public: void hamIn(int i) { cout Biên dịch công tác ta bao gồm kết quả:
Trong ví dụ bên trên, ta chỉ cần sử dụng một hàm tuyệt nhất có tên làhamIn()nhưng mà rất có thể sử dụng được mang đến 3 trường hợp khác nhau. Đây là một thể hiện của tính nhiều hình. Xem thêm: Ý Nghĩa Ẩn Chứa Trong Từng Lời Hát Soledad Nghĩa Là Gì ? Ý Nghĩa Của Bài Hát
Nạp ông chồng toán thù tử (Operator Overloading) được dùng để làm có mang toán tử mang đến có sẵn vào c++ giao hàng mang lại dữ liệu riêng do chúng ta tạo nên.
Giả sử tất cả lớpPhanSovà gồm các cách tiến hành tính toán thù nhỏng Cong, Tru, Nhan, Chia.Nếu gặp gỡ một biểu thức phức tạp, con số phxay tính những thì việc áp dụng những thủ tục bên trên hơi trở ngại với hoàn toàn có thể gây rối cho tất cả những người lập trình. Vì thay ta đã nạp ông xã lại những toán thù tử để hoàn toàn có thể chế tạo ra một cái nhìn trực quan lại vào code, sút tđọc các lỗi không đúng ko xứng đáng bao gồm.
Các toán tử có thể nạp chồng

Các tân oán tử chẳng thể 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 ) chieudai = 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.chieudai = this->chieudai + 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 main cua chuong trinhint main( ){ Box Box1; // Knhị 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 đưa ra 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 Khi chạy chương trình cho kết quả:
Trong ví dụ trên, ta vẫn nạp ông xã lại toán tử cộng. Tính đa hình được thể hiện qua Việc nạp ông xã để 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 chương trình sau khi chạy sẽhotline đến thủ tục show() của lớp Mayvitinch, cơ mà không Hotline cho tới cách thức show() của lớp mayAcer.
Vậy nhằm công tác Hotline cho tới cách thức show() của lớp mayAcer ta áp dụng hàm ảo virtual nhỏng sau:
#include using namespace std;class Mayvitinh{ public: virtual void show() cout show(); Sau khi biên dịch lịch trình sẽ sở hữu kết quả:
Trong ví dụ trên tôi đã thêm từ khóavirtualvào hàmshow()vào lớp cơ sởMayvitinh.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óavirtualtức là hàm này sẽ được Call theo loại đối tượng người dùng được trỏ (hoặc tđắm đuối chiếu), chđọng không phải theo loại của nhỏ trỏ (hoặc tmê man chiếu). Và điều này dẫn mang lại hiệu quả không giống nhau:
Nếu ko knhị báo hàm ảovirtualtrình biên dịch đang hotline hàm trên lớp clàm việc sởNếu dùng hàm ảovirtualtrình biên dịch đang Điện thoại tư vấn hàm tại lớp dẫn xuấtkhi nhận biết tất cả knhì báovirtualvào lớp cửa hàng, trình biên dịch sẽ tiếp tế từng đối tượng người dùng của lớp cửa hàng và các lớp dẫn xuất của nó một con trỏ chỉ cho bảng phương thức ảo (virtual function table). Con trỏ đó có tên là vptr (virtual pointer). Bảng cách thức ảo là chỗ đựng các bé trỏ chỉ đến đoạn lịch trình đã biên dịch ứng cùng với những cách làm ả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 thủ tục ảo Khi bước đầu tất cả bài toán sinh sản đối tượng của lớp. Đến lúc chương trình chạy, cách thức ảo của đối tượng người tiêu dùng mới được nối kết cùng thực hiện trải qua nhỏ trỏ vptr.
Kết
Vậy là series Lập trình phía đối tượng người tiêu dùng của bản thân mình mang lại đây là dứt, bọn họ đã có được mày mò các khái niệm chuyển phiên quanh OOPhường. trong C++ với các đặc điểm quan trọng đặc biệt của nó. Mình hy vọng nội dung bài viết của bản thân vẫn 1 phần góp các ban trong vấn đề học tập lập trình sẵn, đặc biệt là tò mò về OOP..
Nếu các bạn có thắc mắc tuyệt câu hỏi gì có thể bình luận với rate bên dưới bài viết. Mình hi vọng đã nhận ra sự cỗ vũ của các bạn trong những bài xích khác cùng với chủ đề không giống.