Polymorphism là gì

     

Trong bài bác trước, họ hiểu được đà nào làtính kế thừatrong OOP. Ở bài xích này họ sẽ đọc thêm một đặc thù nữa của xây dựng hướng đối tượng người dùng đó là tính nhiều hình nhé.Bạn vẫn xem: Polymorphism là gì

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

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

Một nhỏ trỏ có kiểu lớp cơ sở luôn rất có thể trỏ đến add của một đối tượng người sử dụng của lớp dẫn xuất.Tuy nhiên, khi tiến hành lời call một cách thức của lớp, trình biên dịch sẽ quan tâm đến kiểu của bé trỏ chứ không hề phải đối tượng mà nhỏ trỏ đã trỏ tới: cách thức của lớp mà bé trỏ gồm kiểu được điện thoại tư vấn chứ không hẳn phương thức của đối tượng mà con trỏ vẫn trỏ tới được gọi.

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

Ví dụ:Lớp mayAcer thừa kế từ lớp Mayvitinh, cả hai lớp này rất nhiều định nghĩa cách thức show()

class Mayvitinh{ public: void show(){ cout lúc đó, ví như ta khai báo một bé trỏ lớp mayAcer, mà lại lại trỏ vào địa chỉ của một đối tượng người dùng lớp Mayvitinh:

mayAcer may1; Mayvitinh *tenmay = &may1;tenmay->show(); thì lịch trình sẽ call đến thủ tục show() của lớp Mayvitinh, mà lại không gọi tới cách làm show() của lớp mayAcer.Để giải quyết và xử lý vấn đề này, bọn họ cần áp dụng đến tính nhiều hình vào Lập trình hướng đối tượng. Mình đang giải thích cụ thể hơn ở bên dưới.

Đa hình (polymorphism)nghĩa là có nhiều hình thái khác nhau. Tiêu biểu là, đa hình lộ diện khi bao gồm một cấu trúc cấp bậc của các lớp và chúng liên quan với nhau bởi vì tính kế thừa.

Mình mang một lấy một ví dụ thực vậy nhé:Một tín đồ cùng một lúc có thể có đặc điểm khác nhau. Y hệt như một người bọn học sinh thời là 1 trong người con trai, một fan bạn, một người anh. Bởi vậy, thuộc một người sở hữu hầu hết hành vi khác biệt trong các tình huống khác nhau. Điều này được hotline là đa hình.

Đa hình được coi là một trong số những tính năng đặc biệt quan trọng của Lập trình hướng đối tượng.

Các nhiều loại đa 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 ck hàm hoặc nạp chồng toán tử.

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

Nạp ông chồng hàm

Nạp ông xã hàm (Function Overloading)cho phép sử dụng cùng một tên thường gọi cho những hàm “giống nhau” (có cùng mục đích). Nhưng không giống nhau về kiểu tài liệu tham số hoặc con số tham số.

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

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

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

Xem thêm: 5 Cách Kiểm Tra Phút Gọi Viettel Trả Sau, Đừng Nên Bỏ Các Cách Kiểm Tra Số Phút Gọi Viettel

Nạp ông xã toán tử

Nạp ông xã toán tử (Operator Overloading) được dùng để làm định nghĩa toán tử cho gồm sẵn vào c++ giao hàng cho dữ liệu riêng do chúng ta tạo ra.

Giả sử tất cả lớpPhanSovà có các phương thức đo lường và tính toán như Cong, Tru, Nhan, Chia.Nếu chạm mặt một biểu thức phức tạp, con số phép tính nhiều thì việc sử dụng những phương thức bên trên khá khó khăn và có thể gây rối cho tất cả những người lập trình. Chính vì như thế ta đang nạp ông chồng lại những toán tử để có thể tạo một cái nhìn trực quan lại vào code, bớt thiểu những lỗi không đúng không xứng đáng có.

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


*

Các toán tử cần 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 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 dẻo cua mot box double chieurong; // Chieu rong cua mot box double chieucao; // Chieu cao cua mot box;// mê man main cua chuong trinhint main( ){ Box Box1; // Khai 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 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 khoản thời gian chạy chương trình cho kết quả:

Trong lấy ví dụ trên, ta vẫn nạp ông chồng lại toán tử cộng. Tính nhiều hình được thể hiện qua việc nạp ck để tính tổng Box1 với Box2.

2. Runtime Polymorphism:

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

#include using namespace std;class Mayvitinh{ public: void show() cout show(); Có thể thấy chương trình sau khi chạy sẽgọi đến thủ tục show() của lớp Mayvitinh, cơ mà không gọi tới phương thức show() của lớp mayAcer.

Vậy nhằm chương trình call tới cách làm show() của lớp mayAcer ta sử dụng hàm ảo virtual như 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ẽ sở hữu được kết quả:

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

Khi khai báo hàm ảo với từ khóavirtualnghĩa là hàm này sẽ tiến hành gọi theo loại đối tượng người dùng được trỏ (hoặc tham chiếu), chứ không phải theo một số loại của bé trỏ (hoặc tham chiếu). Và điều này dẫn đến kết quả khác nhau:

Nếu không khai báo hàm ảovirtualtrình biên dịch sẽ hotline hàm trên lớp cở sởNếu cần sử dụng hàm ảovirtualtrình biên dịch sẽ điện thoại tư vấn hàm tại lớp dẫn xuất

Khi nhận ra có khai báovirtualtrong lớp cơ sở, trình biên dịch sẽ tiếp tế mỗi đối tượng của lớp các đại lý và các lớp dẫn xuất của chính nó một bé trỏ chỉ mang đến bảng phương thức ảo (virtual function table). Con trỏ đó có tên là vptr (virtual pointer). Bảng cách làm ảo là nơi chứa các con trỏ chỉ cho đoạn lịch trình đã biên dịch ứng với các phương thức ảo. Từng lớp bao gồm một bảng thủ tục ảo. Trình biên dịch chỉ lập bảng cách tiến hành ảo khi ban đầu có bài toán tạo đối tượng người dùng của lớp. Đến khi chương trình chạy, cách thức ảo của đối tượng người dùng mới được nối kết với thi hành trải qua con trỏ vptr.

Kết

Vậy là series Lập trình hướng đối tượng của bản thân đến đó là kết thúc, chúng ta đã được mày mò các quan niệm xoay xung quanh OOP trong C++ và mọi tính chất quan trọng của nó. Bản thân hy vọng nội dung bài viết của bản thân sẽ 1 phần giúp các ban trong việc học tập lập trình, đặc biệt là tìm phát âm về OOP.

Xem thêm: Vị Trí Nội Tạng Cơ Thể Người, Vị Trí Các Bộ Phận Nội Tạng Trong Cơ Thể

Nếu chúng ta có vướng mắc hay thắc mắc gì tất cả thể comment và rate bên dưới bài viết. Mình hi vọng sẽ nhận thấy sự ủng hộ của chúng ta trong những bài bác khác với chủ thể khác.