TÍNH KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Kế thừa trong thiết kế hướng đối tượng người dùng là một đặc thù rất quan liêu trọng, vì đó, các bạn nên cố gắng kỹ phần này để rất có thể học xuất sắc lập trình hướng đối tượng. Trong những kỳ kiểm tra, chất vấn xin việc cũng thường được hỏi về đặc điểm này.

Bạn đang xem: Tính kế thừa trong lập trình hướng đối tượng

Để đọc hiểu bài này xuất sắc nhất, các bạn nên tất cả biến thức Cơ bạn dạng về class trong C++, nếu chưa hãy dành riêng một ít thời gian đọc bài viết về class của mình. Nếu như bạn đã chuẩn bị sẵn sàng thì hãy ban đầu thôi!


*
*
*
Sơ vật Class

Vậy là bọn họ đã tìm hiểu chấm dứt các nhiều loại kế thừa, giờ đồng hồ hãy coi cú pháp thực hiện kế thừa trong C++ như vậy nào.

Cú pháp

Cú pháp nhằm khai báo một tấm kế thừa xuất phát điểm từ 1 lớp như sau:

class : // code goes here;Trong đó, class phụ thân và class bé đã được trình bày ở bên trên, phạm vi truy vấn sẽ được mình trình diễn ngay bến dưới.

Giả sử mình có một class A với các thuộc tính, phương thức bên trong. Bạn muốn khai báo một class B thừa kế từ class A, mình sẽ sở hữu cú pháp như sau:

class B : public/private/protected A // code goes here;Khi này, các thuộc tính vào class A sẽ tiến hành class B kế thừa. Public/private/protected là phạm vi truy vấn của những thuộc tính sẽ tiến hành kế thừa. Hãy cùng khám phá xem rõ ràng phạm vi truy vấn là ra làm sao ngay mặt dưới.

Phạm vi tróc nã cập

Trong bài Cơ bản về Class vào C++ mình đã có trình làng qua về phạm vi truy vấn (access modifier). Tuy nhiên, phạm vi truy vấn trong bài xích đó khác với phạm vi truy vấn trong kế thừa.

Có hai các loại phạm vi truy tìm cập, truy vấn các thành phần từ phía bên ngoài đối tượng được gọi là truy cập theo chiều ngang. Truy cập các nhân tố của class thân phụ từ class bé được hotline là truy vấn theo chiều dọc. Phạm vi truy vấn trong bài Cơ bạn dạng về Class vào C++ chính là truy cập theo chiều ngang.

Đối cùng với phạm vi truy cập trong kế thừa, kia là truy vấn theo chiều dọc. Giả sử mình gồm class B kế thừa từ class A, rõ ràng các phạm vi truy vấn đó là như sau:

public:Các nằm trong tính public của A sẽ biến thuộc tính public của BCác nằm trong tính protected của A sẽ biến hóa protected của Bprivate:Các thuộc tính public của A sẽ phát triển thành thuộc tính private của BCác thuộc tính protected của A sẽ phát triển thành private của Bprotected:Các thuộc tính public của A sẽ trở nên thuộc tính protected của BCác trực thuộc tính protected của A sẽ đổi thay thuộc tính protected của B

Đối với 1 class, thuộc tính protected tương tự như như private, chỉ có khác tại phần class con hoàn toàn có thể truy cập yếu tắc protected, còn private lại không được cho phép truy cập.

Phạm vi truy cập giúp bảo đảm tính đóng gói và đậy giấu thông tin của đối tượng. Ví dụ như khi thuộc tính public ngơi nghỉ class cha, được kế thừa private quý phái class con, thì nó cũng đổi mới private sống class bé và cấp thiết được truy cập từ bên ngoài class con. Ví dụ:

class Apublic: int publicMethod;;class B : private A;// phía bên trong hàm mainB b;cout

Cài đặt

Từ đầu bài viết đến giờ, bản thân nói không hề ít về lý thuyết mà chưa tồn tại đoạn code làm sao cả. Để cho các bạn dễ gọi hơn, bản thân sẽ áp dụng lại các ví dụ trong bài viết và code chúng bằng C++. Hãy bắt đầu với những quan hệ Has-A trước.

Quan hệ 1 – 1:

class GVCNpublic: LopHoc lopHoc;;class LopHocpublic: GVCN gvcn;;Bạn nào chưa chắc chắn về vector rất có thể xem lại bài viết Vector vào C++ của mình nha.

Quan hệ 1 – n:

class HocSinhpublic: LopHoc lopHoc;;class LopHocpublic: vector hocSinh;;Quan hệ n – n:

class BenhNhanpublic: vector bacSi;;class BacSipublic: vector benhNhan;;Quan hệ Is-A:

class ConNguoipublic: string hoTen; string ngaySinh; string queQuan;;class SinhVien : public ConNguoipublic: string MSSV; string tenTruong; string lop; string chuyenNganh;;

Truy xuất yếu tố từ lớp cơ sở

Khi class con kế thừa thành phần từ bỏ class cơ sở, các thành phần của nó cũng trở nên được thừa hưởng từ class cơ sở. Điều này còn có nghĩa là, bạn có thể sử dụng bé trỏ this để thao tác làm việc với yếu tố của class bây giờ như bình thường. Ví dụ:

class Apublic: int count; void sayHello() cout count = 0; // nằm trong tính count được thừa kế và rất có thể truy cập qua bé trỏ this this->sayHello(); // phương thức cũng khá được kế thừa ;

Override cách tiến hành từ lớp cơ sở

Trong khi áp dụng tính kế thừa, các bạn sẽ gặp đề xuất trường thích hợp hai cách làm ở class con và class cha trùng thương hiệu nhau. Trong trường hợp này, phương thức được khai báo và khái niệm ở class nhỏ sẽ ghi đè lên cách làm ở class thân phụ và nạm thế trọn vẹn nó. Ví dụ:

class A{public: void sayHello() { cout Vậy thì bạn có thể thấy được là, ví như như mà phương thức bị trùng thương hiệu thì nó bị ghi đè, vậy thì không còn đảm bảo được tính tái áp dụng code của tính kế thừa. Vậy làm cho sao bạn có thể tái áp dụng lại đoạn code của cách làm ở class cha?

Sử dụng toán tử phân giải phạm vi (::), chúng ta có thể gọi được cách làm từ class cha, bên cạnh đó chúng ta còn tồn tại thể bổ sung được những đoạn code của riêng thủ tục ở class con. Ví dụ:

class A{public: void sayHello() { cout Thật dễ dàng đúng ko nào!

Upcasting và downcasting

Nhiều chúng ta có thể sẽ thắc mắc, lấy một ví dụ “sinh viên là một trong con người”, vậy thì bé trỏ giao diện sinh viên hoàn toàn có thể trỏ đến nhỏ trỏ kiểu con người hoặc ngược lại hay không. Đây chính là vấn đề upcasting và downcasting. Tuy nhiên, để đảm bảo tính toàn diện dữ liệu, bạn chỉ nên xem tham khảo chứ không nên dùng, do có thể gây mất mát tài liệu hoặc nhận dữ liệu không hy vọng muốn.

Upcasting

Upcasting là biến hóa đối tượng mẫu mã class bé sang hình trạng class cha. Tức là, nhỏ trỏ mẫu mã class phụ vương có thể trỏ đến bé trỏ dạng hình class con, tuy thế không bảo toàn được những thuộc tính, cách tiến hành của class con. Bài toán chuyển vẻ bên ngoài này được thực hiện ngầm định bởi vì trình biên dịch C++. Các phương thức bị override có khả năng sẽ bị override ngược lại bởi class cha. Ví dụ:

class A{public: void sayHello() { cout sayHello(); // Hello, welcome to lớn khiemle.dev!p->sayGoodbye(); // Lỗi bởi vì A không có phương thức nàyRõ ràng, giả dụ như sinh viên là 1 trong con người, thì bé trỏ kiểu con người có thể lưu trữ được sv đúng không bởi vì sinh viên là con bạn mà!

Tuy nhiên, vị class cha là class tổng thể hóa, có ít thông tin hơn so với class con, bởi đó, khi chuyển kiểu ta không thể bảo đảm an toàn sự toàn vẹn dữ liệu được.

Downcasting

Downcasting thì ngược lại với upcasting, tức là chuyển đối tượng người dùng kiểu class thân phụ sang đối tượng kiểu class con. Cách này lại không được trình biên dịch thực hiện tự động hóa mà chúng ta phải tự chuyển kiểu nó. Mặc dù nhiên, các thuộc tính, cách làm ở class con nhiều hơn thế nữa class cha, do class con là cụ thể hóa của class cha. Do đó, các thuộc tính không tồn tại ở class phụ vương sẽ nhận quý hiếm rác không mong muốn. Ví dụ:

class A{public: void sayHello() cout propInB = 0; void sayHello() { A::sayHello(); cout propInB; // một vài ngẫu nhiên

Đa kế thừa

Đa kế thừa nghĩa là thay vì chưng một class dẫn xuất kế thừa xuất phát điểm từ một class cơ sở, class dẫn xuất này có thể có kế thừa từ rất nhiều class cơ sở khác nhau. Ví như một loài động vật hoang dã thì đã kế thừa điểm sáng từ cả bố và bà mẹ của chúng.

Trong C++, để thực hiện đa kế thừa, cú pháp tương tự như kế thừa, nhưng mà class cơ sở có thể có không ít hơn 1, ngăn cách nhau do dấu phẩy (,). Ví dụ:

class A public: A() ;class B public: B() ;// Class C thừa kế từ class A với Bclass C : public A, public B public: C() ;Khi thừa kế từ rất nhiều class cơ sở, bạn thấy sẽ có một vụ việc phát sinh đó là khi lớp cơ sở bao gồm phương thức trùng tên, lúc gọi cách thức sẽ xảy ra sự mơ hồ. Sự mơ hồ nước nghĩa là trình biên dịch không biết bạn đang gọi cách thức từ class dẫn xuất nào. Ví dụ:

class A {public: A() void sayHello() { cout Để giải quyết và xử lý sự nhập nhằn này, bạn có thể sử dụng toán tử phạm vi (::) để chỉ rõ cách làm ở class làm sao như sau:

class A {public: A() void sayHello() { cout

Tổng kết

Trong phần kế thừa này, cơ phiên bản nó ko khó, chỉ việc bạn phân tích sệt tả được dữ liệu mà đề bài bác cho, hoặc trong tình huống thực tế, bạn sẽ làm được nó. Trong thời gian tới bản thân sẽ nỗ lực tổng hợp bài tập về phần này để các bạn nắm được về thừa kế trong C++.

Xem thêm: Hướng Dẫn Cách Đổi Màu Đen Trên Messenger Trên Điện Thoại, Máy Tính Chi Tiết

Vậy là qua bài bác này, mình đã ra mắt cho các bạn biết về kế thừa trong C++ nói riêng cùng trong lập trình hướng đối tượng người sử dụng nói chung. Hi vọng là các bạn thấy thấy nội dung bài viết của mình, chớ quên share cho đồng đội cùng biết nha.

Nếu có bất kỳ thắc mắc hoặc góp ý nào, các bạn cũng có thể comment phía dưới bài viết. Cảm ơn các bạn đã đọc bài viết!

table('setting')->where("{$db->web}")->select('code_footer'); if($oh->code_footer){ # nếu có code header tùy chỉnh $code_footer = htmlspecialchars_decode($oh->code_footer); $code_footer = str_replace('[home_link]', $home, $code_footer); $code_footer = str_replace('[home_name]', $h, $code_footer); $code_footer = str_replace('[link]', $link, $code_footer); $code_footer = str_replace('[title]', $head->tit, $code_footer); $code_footer = str_replace('[des]', $head->des, $code_footer); $code_footer = str_replace('[key]', $head->key, $code_footer); $code_footer = str_replace('[image]', $head->img, $code_footer); $code_footer = str_replace('[link]', $link, $code_footer); $code_footer = str_replace('[date_Y]', date('Y'), $code_footer); echo $code_footer; } ?>