Đa hình là gì

     

Trong bài bác trước, bọn họ hiểu thừa thế nào làtính kế thừatrong OOP. Ở bài bác này chúng ta sẽ xem thêm một đặc điểm 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 đang xem: đa hình là gì

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

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

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

Ví dụ:Lớp mayAcer thừa kế từ lớp Mayvitinh, cả nhị lớp này đều định nghĩa phương thức show()

class Mayvitinh{ public: void show(){ cout khi đó, nếu ta khai báo một nhỏ trỏ lớp mayAcer, nhưng mà lại trỏ vào add của một đối tượng lớp Mayvitinh:

mayAcer may1; Mayvitinh *tenmay = &may1;tenmay->show(); thì lịch trình sẽ hotline đến cách thức show() của lớp Mayvitinh, mà không hotline tới cách thức show() của lớp mayAcer.Để giải quyết vấn đề này, họ cần thực hiện đến tính đa hình trong Lập trình phía đố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ó khá nhiều hình thái không giống nhau. Tiêu biểu là, đa hình lộ diện khi gồm một kết cấu cấp bậc của những lớp với chúng tương quan với nhau bởi vì tính kế thừa.

Mình đem một lấy ví dụ như thực cụ nhé:Một người cùng một lúc có thể có điểm sáng khác nhau. Giống hệt như một người bọn học sinh thời là một trong người bé trai, một fan bạn, một tín đồ anh. Vì vậy, thuộc một tín đồ sở hữu hầu như hành vi không giống nhau trong các tình huống khác nhau. Điều này được gọi là đa hình.

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

Các một số loại đa hình:

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

Vậy nạp chồng hàm và nạp ck toán tử là gì?

Nạp ông chồng hàm

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

Nạp ck hàm có thể chấp nhận được ta khai báo cùng định nghĩa các hàm trên cùng rất một thương hiệu gọi.

Xem thêm: Kích Hoạt Ipad Khi Quên Id Apple, Cách Mở Khóa Ipad Khi Quên Id Apple

Chúng ta đem 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 một ví dụ trên, ta chỉ dùng một hàm duy nhất có tên làhamIn()nhưng có thể dùng được mang đến 3 tình huống khác nhau. Đây là 1 thể hiện của tính đa hình.

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

Nạp chồng toán tử (Operator Overloading) được dùng để định nghĩa toán tử cho bao gồm sẵn vào c++ ship hàng cho tài liệu riêng do bạn tạo ra.

Giả sử bao gồm lớpPhanSovà có các phương thức đo lường và thống kê như Cong, Tru, Nhan, Chia.Nếu gặp gỡ một biểu thức phức tạp, con số phép tính nhiều thì câu hỏi sử dụng các phương thức bên trên khá trở ngại và rất có thể gây rối cho tất cả những người lập trình. Chính vì vậy ta đang nạp ông xã lại các toán tử để hoàn toàn có thể tạo một cái nhìn trực quan vào code, giảm thiểu những lỗi không đúng khô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 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; // 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 đư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 mang đến kết quả:

Trong lấy ví dụ như trên, ta đã nạp chồng lại toán tử cộng. Tính đa hình được thể hiện qua câu hỏi nạp chồng để tính tổng Box1 cùng Box2.

2. Runtime Polymorphism:

Các bàn còn ghi nhớ 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 thời điểm chạy sẽgọi đến cách thứ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.

Vậy nhằm chương trình điện thoại tư vấn tới phương thức 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ẽ có kết quả:

Trong ví dụ như trên tôi đã thêm từ bỏ 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ừ bỏ khóavirtualnghĩa là hàm này sẽ tiến hành gọi theo loại đối tượng người tiêu dùng được trỏ (hoặc tham chiếu), chứ không hẳn theo các loại của con trỏ (hoặc tham chiếu). Và vấn đề này dẫn đến hiệu quả khác nhau:

Nếu không khai báo hàm ảovirtualtrình biên dịch sẽ call hàm trên lớp cở sởNếu dùng hàm ảovirtualtrình biên dịch sẽ gọi 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 người tiêu dùng của lớp cửa hàng và những lớp dẫn xuất của nó một bé trỏ chỉ mang lại bảng cách làm ảo (virtual function table). Nhỏ 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 chương trình đã biên dịch ứng với những phương thức ảo. Mỗi lớp 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ó câu hỏi tạo đối tượng người sử dụng của lớp. Đến khi công tác chạy, phương thức ảo của đối tượng người tiêu 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 phía đối tượng của chính mình đến đó là kết thúc, họ đã được tò mò các định nghĩa xoay xung quanh OOP trong C++ và phần lớn tính chất đặc biệt của nó. Bản thân hy vọng bài viết của mình sẽ một phần giúp các ban trong bài toán học tập lập trình, nhất là tìm hiểu về OOP.

Xem thêm: Cách Bật, Tắt Tính Năng Chạm 2 Lần Mở Màn Hình Sony Xa 1, Xz, Z1

Nếu các bạn có thắc mắc hay thắc mắc gì tất cả thể phản hồi và rate dưới bài viết. Mình hy vọng sẽ nhận ra sự cỗ vũ của chúng ta trong những bài khác với chủ thể khác.