Trong bài bác trước, bọn họ gọi thừa thế làm sao làtính kế thừavào OOP. Ở bài bác này họ vẫn đọc thêm một đặc điểm nữa của xây dựng phía đối tượng người sử dụng đó là tính đa hình nhé.

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

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

Sự thừa kế trong C++ có thể chấp nhận được tất cả sự tương xứng thân lớp đại lý và những lớp dẫn xuất vào sơ đồ dùng quá kế:

Một con trỏ có dạng hình lớp các đại lý luôn rất có thể trỏ đến liên tưởng của một đối tượng người dùng của lớp dẫn xuất.Tuy nhiên, Khi tiến hành lời Gọi một cách tiến hành của lớp, trình biên dịch sẽ quan tâm mang lại hình dạng của con trỏ chứ không phải đối tượng người dùng nhưng con trỏ sẽ trỏ tới: thủ tục của lớp mà lại con trỏ có đẳng cấp được điện thoại tư vấn chđọng không phải cách tiến hành của đối tượng người tiêu dùng mà con trỏ đã trỏ tới được Call.

Ví dụ:Lớp mayAcer thừa kế từ lớp Mayvitinh, cả hai lớp này gần như tư tưởng cách làm show()

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

mayAcer may1; Mayvitinh *tenmay = &may1;tenmay->show(); thì công tác vẫn gọi mang đến cách làm show() của lớp Mayvitinc, nhưng mà không Call cho tới cách tiến hành show() của lớp mayAcer.Để xử lý vấn đề này, họ đề xuất thực hiện đến tính đa hình trong Lập trình hướng đối tượng người dùng. Mình sẽ lý giải cụ thể hơn sinh hoạt bên dưới.

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

Mình lấy một ví dụ thực nỗ lực nhé:Một người cùng một cơ hội hoàn toàn có thể tất cả điểm lưu ý khác biệt. Giống nhỏng một fan bầy học sinh thời là 1 trong những bạn con trai, một người chúng ta, một người anh. Vì vậy, và một bạn sở hữu đầy đủ hành động khác biệt trong các tình huống khác nhau. Vấn đề này được hotline là đa hình.

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

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

Tính đa hình hầu hết được tạo thành hai 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 chồng hàm hoặc hấp thụ ông chồng tân oán tử.

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

Nạp ông chồng hàm

Nạp chồng hàm (Function Overloading)chất nhận được thực hiện và một tên thường gọi cho các hàm “tương tự nhau” (bao gồm cùng mục đích). Nhưng khác biệt về loại tài liệu tmê man số hoặc số lượng tmê man số.

Nạp ông chồng hàm được cho phép ta knhị báo và định nghĩa các hàm trên cùng với một tên gọi.

Xem thêm: Mã Code Ussd Là Gì ? Tất Tần Tật Những Thông Tin Mới Nhất Về Ussd

Chúng ta đem ví dụ:

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

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

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

Nạp ông xã toán thù tử (Operator Overloading) được dùng để định nghĩa tân oán tử đến tất cả sẵn trong c++ giao hàng đến dữ liệu riêng biệt bởi vì bạn tạo ra.

Giả sử bao gồm lớpPhanSovới có những thủ tục tính tân oán nhỏng Cong, Tru, Nhan, Chia.Nếu gặp một biểu thức tinh vi, số lượng phép tính các thì câu hỏi áp dụng các cách làm bên trên khá trở ngại với hoàn toàn có thể quấy rồi cho người thiết kế. Vì chũm ta sẽ hấp thụ ông xã lại những toán thù tử nhằm rất có thể chế tạo một cái chú ý trực quan vào code, bớt tđọc các lỗi sai không đáng có.

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

*

Các toán tử quan yếu nạp chồng:

..*::?:

Ví dụ:

#include using namespace std;class Box public: double tinhTheTich(void) return chieudai * chieurong * chieucao; void setChieuDai( double dai ) 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 dẻo cua mot box double chieurong; // Chieu rong cua mot box double chieucao; // Chieu cao cua mot box;// đắm say 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 bỏ 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 lúc chạy công tác mang đến kết quả:

Trong ví dụ trên, ta đã nạp ông chồng lại toán tử cùng. Tính nhiều hình được biểu hiện qua Việc nạp ông xã để tính tổng Box1 cùng Box2.

2. Runtime Polymorphism:

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

#include using namespace std;class Mayvitinh{ public: void show() cout show(); cũng có thể thấy chương trình sau thời điểm chạy sẽcall mang đến cách làm show() của lớp Mayvitinc, cơ mà ko Call tới cách tiến hành show() của lớp mayAcer.

Vậy để công tác hotline tới thủ tục show() của lớp mayAcer ta thực hiện 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 chương trình sẽ có kết quả:

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

Lúc knhì báo hàm ảo với tự khóavirtualnghĩa là hàm này sẽ được hotline theo một số loại đối tượng người tiêu dùng được trỏ (hoặc tđắm say chiếu), chđọng chưa phải theo loại của bé trỏ (hoặc tđắm say chiếu). Và điều này dẫn cho hiệu quả không giống nhau:

Nếu ko knhị báo hàm ảovirtualtrình biên dịch vẫn Điện thoại tư vấn hàm trên lớp csinh sống sởNếu cần sử dụng hàm ảovirtualtrình biên dịch sẽ Gọi hàm tại lớp dẫn xuất

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

Kết

Vậy là series Lập trình hướng đối tượng người sử dụng của chính mình đến đó là chấm dứt, bọn họ đã được mày mò các định nghĩa chuyển phiên quanh OOPhường trong C++ và những tính chất đặc biệt quan trọng của chính nó. Mình hi vọng nội dung bài viết của mình sẽ một phần góp các ban trong câu hỏi tiếp thu kiến thức lập trình, nhất là mày mò về OOP.

Xem thêm: Group J2Team Community Là Gì ? Giới Thiệu Về J2Team Và J2Team Community

Nếu các bạn gồm thắc mắc tốt câu hỏi gì có thể bình luận cùng rate bên dưới nội dung bài viết. Mình hy vọng sẽ nhận ra sự cỗ vũ của các bạn trong những bài xích không giống cùng với chủ thể khác.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *