Trong bài bác trước, họ đọc được thế làm sao làtính kế thừatrong OOPhường. Ở bài bác này chúng ta vẫn đọc thêm một tính chất nữa của lập trình sẵn hướng đối tượng người sử dụng sẽ là tính nhiều hình nhé.

Bạn đang xem: Tính đa hình là gì

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

Sự thừa kế trong C++ chất nhận được bao gồm sự tương ứng giữa lớp đại lý với các lớp dẫn xuất vào sơ vật dụng vượt kế:

Một bé trỏ bao gồm hình dáng lớp cơ sở luôn rất có thể trỏ đến can hệ 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 điện thoại tư vấn một cách làm của lớp, trình biên dịch sẽ quyên tâm mang đến hình dạng của con trỏ chứ đọng chưa phải đối tượng người dùng cơ mà bé trỏ vẫn trỏ tới: cách làm của lớp mà nhỏ trỏ gồm phong cách được Hotline chđọng không phải cách làm của đối tượng người tiêu dùng mà lại bé trỏ sẽ trỏ cho tới được điện thoại tư vấn.

Ví dụ:Lớp mayAcer thừa kế từ bỏ lớp Mayvitinch, cả hai lớp này đều định nghĩa thủ tục show()

class Mayvitinh{ public: void show(){ cout khi ấy, giả dụ ta knhị báo một nhỏ trỏ lớp mayAcer, nhưng mà lại trỏ vào ảnh hưởng của một đối tượng lớp Mayvitinh:

mayAcer may1; Mayvitinch *tenmay = &may1;tenmay->show(); thì lịch trình đã Điện thoại tư vấn đến thủ tục show() của lớp Mayvitinh, mà ko hotline tới phương thức show() của lớp mayAcer.Để giải quyết vấn đề này, bọn họ bắt buộc sử dụng cho tính đa hình trong Lập trình hướng đối tượng người tiêu dùng. Mình đang phân tích và lý giải cụ thể hơn sinh sống dưới.

Đa hình (polymorphism)tức thị có rất 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 gồm một kết cấu cấp bậc của những lớp cùng chúng liên quan với nhau vày tính kế thừa.

Mình lấy một ví dụ thực thay nhé:Một người cùng một lúc hoàn toàn có thể bao gồm đặc điểm không giống nhau. Giống như một người lũ học sinh thời là 1 trong tín đồ con trai, một bạn các bạn, một bạn anh. Vì vậy, cùng một bạn cài đều hành động khác nhau trong các trường hợp khác nhau. Điều này được Điện thoại tư vấn là đa hình.

Đa hình được coi là một giữa những nhân kiệt đặc trưng của Lập trình phía đối tượng người sử dụng.

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

Tính nhiều hình đa số được chia 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 phương pháp nạp ông chồng hàm hoặc nạp ck toán thù tử.

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

Nạp ông chồng hàm

Nạp ông chồng hàm (Function Overloading)cho phép áp dụng 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ề dạng hình tài liệu tđê mê số hoặc con số tđắm say số.

Nạp ông xã hàm cho phép ta knhị báo cùng tư tưởng các hàm trên cùng rất một tên gọi.

Xem thêm: Kenny Sang: Gia Thế Thực Sự Của "Đại Thiếu Gia" Kenny Sang, Những Gì Kenny Sang Nói Là Sự Thật

Chúng ta đem 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ụ bên trên, ta chỉ cần sử dụng một hàm duy nhất mang tên làhamIn()dẫu vậy có thể cần sử dụng được mang lại 3 tình huống không giống nhau. Đây là một trong những mô tả của tính đa hình.

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

Nạp ck toán thù tử (Operator Overloading) được dùng làm quan niệm tân oán tử đến bao gồm sẵn vào c++ ship hàng mang đến dữ liệu riêng rẽ bởi vì các bạn tạo ra.

Giả sử bao gồm lớpPhanSovà có các phương thứ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, con số phnghiền tính nhiều thì vấn đề thực hiện các cách thức trên tương đối khó khăn và rất có thể gây phá cho người lập trình. Vì nỗ lực ta đang nạp ck lại những toán thù tử để có thể tạo một chiếc chú ý trực quan tiền vào code, sút tphát âm những lỗi sai không xứng đáng tất cả.

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

*

Các toán 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 hai doi tuong Box. Box operator+(const Boxvà 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;// say 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; // Knhì 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 đưa 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 lịch trình mang đến kết quả:

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

2. Runtime Polymorphism:

Các bàn còn ghi nhớ ví dụ thứ nhất của bài bác không.

#include using namespace std;class Mayvitinh{ public: void show() cout show(); cũng có thể thấy công tác sau thời điểm chạy sẽhotline mang lại cách thức show() của lớp Mayvitinh, mà lại ko call cho tới cách thức show() của lớp mayAcer.

Vậy để công tác Hotline tới cách tiến hành show() của lớp mayAcer ta thực hiện hàm ảo virtual nhỏng sau:

#include using namespace std;class Mayvitinh{ public: virtual void show() cout show(); Sau Lúc biên dịch công tác sẽ có kết quả:

Trong ví dụ bên trên mình đã thêm từ bỏ 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 khai báo hàm ảo với từ khóavirtualtức là hàm này sẽ tiến hành hotline theo một số loại đối tượng được trỏ (hoặc tsi mê chiếu), chđọng chưa phải theo một số loại của con trỏ (hoặc tmê say chiếu). Và vấn đề đó dẫn mang lại hiệu quả khác nhau:

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

Lúc nhận ra tất cả khai báovirtualvào lớp cơ sở, trình biên dịch đã thêm vào mỗi đối tượng người tiêu dùng của lớp đại lý và các lớp dẫn xuất của nó một bé trỏ chỉ đến bảng thủ tục ảo (virtual function table). Con trỏ kia có tên là vptr (virtual pointer). Bảng cách thức ảo là vị trí cất các bé trỏ chỉ cho đoạn công tác vẫn biên dịch ứng cùng với các phương thức ảo. Mỗi lớp bao gồm một bảng thủ tục ảo. Trình biên dịch chỉ lập bảng thủ tục ảo khi bắt đầu có Việc chế tạo ra đối tượng người dùng của lớp. Đến Lúc lịch trình chạy, phương thức ảo của đối tượng người dùng new được nối kết cùng thi hành thông 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 mình đến đó là chấm dứt, bọn họ đã có khám phá các định nghĩa chuyển phiên xung quanh OOPhường trong C++ với phần đa tính chất quan trọng của nó. Mình hi vọng nội dung bài viết của bản thân đang một trong những phần góp những ban trong bài toán tiếp thu kiến thức xây dựng, đặc biệt là mày mò về OOPhường.

Xem thêm: Bài 3 Một Lăng Kính Có Góc Chiết Quang Là Gì, Bài 3 Một Lăng Kính Có Góc Chiết Qu

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


Chuyên mục: Ý NGHĨA
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 *