Được bảo vệ trong C++
Kế thừa trong lập trình hướng đối tượng là một tính chất rất quan trọng, do đó, các bạn nên nắm kỹ phần này để có thể học tốt lập trình hướng đối tượng. Trong các kỳ kiểm tra, phỏng vấn xin việc cũng thường được hỏi về tính chất này Show Để đọc hiểu bài viết này hay nhất, các bạn nên có biến thức Cơ bản về class trong C++, nếu chưa hãy dành ít thời gian đọc bài viết về class của mình. Nếu bạn đã có sẵn thì hãy bắt đầu thôi 1001 Mẹo. Con trỏ và hàm (Con trỏ & Hàm) trong C++ Bảng băm trong C++ Kế thừa là gì?Kế thừa là một trong các tính chất đặc trưng của chương trình hướng đối tượng, bên cạnh tính đóng gói (đóng gói), che giấu thông tin (giấu thông tin), tính đa hình (đa hình) và tính trừu tượng (trừu tượng). Vậy thì kế thừa là gì? Kế thừa (kế thừa) là một tính chất đặc trưng của hướng đối tượng lập trình. Nó có nghĩa là một lớp thừa hưởng lại tất cả các thuộc tính, phương thức của lớp mà nó kế thừa Lớp kế thừa từ một lớp khác được gọi là lớp con (lớp con hoặc lớp con) hoặc lớp dẫn xuất (lớp dẫn xuất). Lớp được lớp khác kế thừa được gọi là lớp cha (lớp cha hay lớp cha) hay lớp cơ sở (lớp cơ sở) Ví dụ như bạn có một lớp con người, có các thuộc tính cơ bản như họ tên, ngày sinh, quê quán, mình khai báo thêm một lớp sinh viên kế thừa từ lớp con người. Vì vậy, lớp sinh viên sẽ có các thuộc tính họ tên, ngày sinh, quê quán từ lớp con người mà không cần phải khai báo. Lớp con người sẽ là lớp cha và lớp sinh viên là lớp con Ngoài các thuộc tính của lớp cha, lớp con còn có thể có thêm các thuộc tính, phương thức của riêng mình. Ví dụ như sinh viên thì có thêm các thuộc tính như MSSV, tên trường, chuyên ngành… Chúng ta đã hiểu được kế thừa là gì rồi. Do đó, câu hỏi đặt ra lúc này là tại sao cần phải có kế thừa? Tại sao cần phải có kế thừa?Trong quá trình lập trình, chắc chắn các bạn sẽ gặp phải rất nhiều hành động lặp đi lặp lại, và chắc chắn một điều rằng sẽ không ai rảnh mà ngồi code lại từ đầu cả. Thay vào đó, họ sẽ sử dụng lại các đoạn mã đã có để thực hiện công việc tương tự. Nói đến đây chắc các bạn cũng đã hiểu kế thừa có tác dụng gì rồi đúng không nào Kế thừa giúp ta có thể tái sử dụng lại các đoạn mã đã có, tránh việc giải quyết các bài toán con đã có lời giải trước đó, gây lãng phí thời gian. Nếu chỉ là một, hai hoặc ba hành động cần giải quyết thì không thành vấn đề, nhưng nếu là một phần trăm thì đó lại là một chuyện khác, bạn sẽ mất thời gian nếu bạn không biết tận hưởng những gì đã có đó. Trong ví dụ ở đầu bài viết, các bạn có để ý thấy mối quan hệ giữa giai cấp con người và sinh viên không? . Do đó, tính kế thừa giúp chúng ta có thể dễ dàng thể hiện mối quan hệ giữa các đối tượng hơn (sẽ được trình bày bên dưới) Có thể bạn quan tâmSinh viên ngoài những điểm đặc biệt của lớp con người ra, còn có thể có thêm những điểm đặc biệt của riêng mình ví dụ như tên trường, tên ngành, năm học… Đây là mối quan hệ tổng lược hóa – đặc biệt hóa trong kế hoạch . Lớp con người chính là tổng tiêu hóa và lớp con viên chính là đặc biệt hóa Mối quan hệ giữa các đối tượngCó hai mối quan hệ giữa các đối tượng trong C++, quan hệ “Has-A” và quan hệ “Is-A” Quan hệ Has-ACó 3 loại quan hệ “có” giữa các đối tượng, mối quan hệ một – một, mối quan hệ một – nhiều và mối quan hệ nhiều – nhiều Quan hệ một – một (1 – 1) là mối quan hệ giữa hai đối tượng thuộc hai lớp khác nhau, mỗi đối tượng thuộc lớp này có quan hệ duy nhất với một đối tượng thuộc lớp kia và tương ứng với từng đối tượng của lớp. Ví dụ như mỗi lớp chỉ có một giáo viên chủ nhiệm, mỗi giáo viên chỉ được chủ nhiệm một lớp, mỗi một quốc gia chỉ có một thủ đô, một thành phố chỉ có thể là thủ đô của một quốc gia… Quan hệ một – nhiều (1 – n) là mối quan hệ giữa các đối tượng thuộc hai lớp khác nhau, mỗi đối tượng thuộc lớp này có quan hệ duy nhất với một đối tượng thuộc lớp kia, nhưng mỗi đối tượng thuộc lớp kia có Ví dụ như mỗi học sinh chỉ có một lớp học, nhưng mỗi lớp học lại có thể có nhiều học sinh, hay mỗi nhân viên chỉ có thể làm cho một công ty nhưng một công ty lại có thể có nhiều nhân viên… Quan hệ nhiều – nhiều (n – n) là mối quan hệ giữa các đối tượng thuộc hai lớp khác nhau, mỗi đối tượng thuộc lớp này có thể quan hệ với nhiều đối tượng thuộc lớp kia, và mỗi đối tượng thuộc lớp kia cũng có Ví dụ như mỗi bệnh nhân có thể khám bệnh ở nhiều bác sĩ khác nhau, và mỗi bác sĩ lại có thể khám bệnh cho nhiều bệnh nhân… Quan hệ tổng thể – đặc biệt hóa là mối quan hệ giữa các đối tượng thuộc hai lớp khác nhau khi đối tượng thuộc lớp này là trường hợp đặc biệt của lớp kia, và đối tượng thuộc lớp kia là trường tổng hợp của đối tượng Ví dụ như con người là tổng hợp hóa của sinh viên, còn sinh viên là đặc biệt hóa của con người, xe máy hiệu exciter là đặc biệt hóa của xe máy và xe máy là tổng hợp của xe máy hiệu exciter… Quan hệ Is-AMối quan hệ Is-A giữa các đối tượng chính là lớp này là lớp kia. Cũng ví dụ từ đầu bài viết đến giờ, sinh viên là một kẻ lừa đảo (sinh viên là con người). Đó chính là mối quan hệ đã được thực hiện kế thừa Các loại kế thừaChúng ta đã cùng nhau tìm hiểu về kế thừa là gì và tại sao cần phải có kế thừa, tiếp theo, hãy cùng tìm hiểu xem có những loại kế thừa nào nha Kế thừa đơnKế thừa đơn (kế thừa đơn) là một lớp kế thừa duy nhất từ một lớp cha. Ví dụ như lớp sinh viên chỉ kế thừa duy nhất từ lớp con người, đó là kế thừa đơn Kế hoạch đa cấpKế thừa đa cấp (kế thừa đa cấp) là một lớp kế thừa từ một lớp cha, lớp cha đó lại kết thừa từ một lớp khác. Ví dụ như lớp sinh viên kế thừa từ lớp học sinh, lớp học sinh lại kế thừa từ lớp con người, đó là kế thừa đa cấp Kế hoạch phân cấp kế thừaKế thừa phân cấp (thừa kế phân cấp) là khi có nhiều hơn một lớp kế thừa từ lớp cha. Ví dụ như lớp sinh viên và lớp công nhân đều kế thừa từ lớp cha là con người Một sơ đồ lớp không chỉ có một trong 3 loại kế thừa, mà thậm chí có thể có cả 3 và điều này hoàn toàn bình thường và rất thường xuyên Do đó chúng ta đã tìm hiểu xong các kiểu kế thừa, giờ hãy xem cú pháp thực hiện kế thừa trong C++ như thế nào cú phápCú pháp để khai báo một lớp kế thừa từ một lớp như sau
Trong đó, lớp cha và lớp con đã được trình bày ở bên trên, phạm vi truy cập sẽ được trình bày ngay bến dưới Giả sử mình có một lớp A với các thuộc tính, phương thức bên trong. Mình muốn khai báo lớp B kế thừa từ lớp A, mình sẽ có cú pháp như sau
Khi này, các thuộc tính trong lớp A sẽ được lớp B kế thừa. công khai/riêng tư/được bảo vệ là phạm vi truy cập của các thuộc tính sẽ được kế thừa. Hãy cùng tìm hiểu cụ thể phạm vi truy cập như thế nào ngay bên dưới Phạm vi truy cậpTrong bài Cơ bản về Class trong C++ mình đã có giới thiệu qua về phạm vi truy cập (công cụ sửa đổi truy cập). Tuy nhiên, phạm vi truy cập trong bài đó khác với phạm vi truy cập trong kế thừa Có hai loại phạm vi truy cập, truy cập các thành phần từ bên ngoài đối tượng được gọi là truy cập theo chiều ngang. Truy cập các thành phần của lớp cha từ lớp con được gọi là truy cập theo chiều dọc. Phạm vi truy cập trong bài Cơ bản về Lớp trong C++ chính là truy cập theo chiều ngang Đối với phạm vi truy cập trong kế thừa, đó là truy cập theo chiều dọc. Giả sử mình có lớp B kế thừa từ lớp A, cụ thể các phạm vi truy cập đó là như sau
Đối với một lớp, thuộc tính được bảo vệ cũng tương tự như riêng tư, chỉ có khác ở chỗ con lớp có thể truy cập vào phần được bảo vệ, còn riêng tư lại không cho phép truy cập Phạm vi truy cập giúp đảm bảo tính đóng gói và che giấu thông tin của đối tượng. Ví dụ như khi thuộc tính public ở lớp cha, được kế thừa private sang lớp con, thì nó cũng trở thành private ở lớp con và không thể truy cập được từ bên ngoài lớp con. Ví dụ
Cài đặtTừ đầu bài viết đến giờ, mình nói khá nhiều về lý thuyết mà chưa có đoạn code nào cả. Để các bạn dễ hiểu hơn, mình sẽ sử dụng lại các ví dụ trong bài viết và code chúng bằng C++. Please started with các quan hệ Has-A trước Quan hệ 1 – 1
Bạn nào chưa biết về vector có thể xem lại bài viết Vector trong C++ của mình nha Quan hệ 1 – n
quan hệ n – n
Quan hệ Is-A
Truy xuất thành phần từ lớp cơ sởKhi lớp kế thừa thành phần từ cơ sở lớp, các thành phần của nó cũng sẽ được thừa hưởng từ cơ sở lớp. Điều này có nghĩa là, bạn có thể sử dụng con trỏ này để thao tác với thành phần của lớp hiện tại như bình thường. Ví dụ
Ghi đè phương thức từ lớp cơ sởTrong khi sử dụng tính kế thừa, bạn sẽ gặp phải trường hợp hai phương thức ở lớp con và lớp cha trùng tên nhau. Trong trường hợp này, phương thức được khai báo và định nghĩa ở lớp con sẽ ghi đè lên phương thức ở lớp cha và thay thế hoàn toàn nó. Ví dụ ________số 8Do đó, bạn có thể thấy được là, nếu như mà phương thức bị trùng tên thì nó bị ghi lại, vậy thì không còn chắc chắn được tính tái sử dụng mã của tính kế thừa. Vậy thì sao chúng ta có thể tái sử dụng lại đoạn mã của phương thức ở lớp cha? Sử dụng thuật toán phân tích phạm vi (. ), chúng ta có thể gọi là phương thức thức từ lớp cha, ngoài ra chúng ta còn có thể bổ sung được các đoạn mã của phương thức riêng ở lớp con. Ví dụ
Đơn giản không đúng sự thật Upcasting và downcastingNhiều bạn có thể sẽ thắc mắc, ví dụ ví dụ “sinh viên là con người”, vậy thì con trỏ kiểu sinh viên có thể trỏ đến con 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 vẹn dữ liệu, bạn chỉ nên xem tham khảo chứ không nên sử dụng, do có thể gây mất mát dữ liệu hoặc nhận dữ liệu không mong muốn UpcastingUpcasting is convert object type class con to type class cha. Tức là, con trỏ kiểu lớp cha có thể trỏ đến con trỏ kiểu lớp con, nhưng không đảm bảo toàn bộ các thuộc tính, phương thức của lớp con. Kiểu chuyển đổi này đã được giải quyết bởi biên dịch C++. The method are override will be override back by class cha. Ví dụ 0Rõ ràng, nếu như sinh viên là con người, thì con trỏ kiểu con người có thể lưu trữ được sinh viên đúng không bởi vì sinh viên là con người mà Tuy nhiên, do lớp cha là lớp tổng hợp hóa, có ít thông tin hơn so với lớp con, do đó, khi chuyển kiểu ta không thể đảm bảo toàn bộ dữ liệu được hạ thấpDowncasting thì ngược lại với upcasting, tức là chuyển đối tượng kiểu lớp cha sang đối tượng kiểu lớp con. Cách này lại không được biên dịch thực hiện tự động mà bạn phải tự chuyển đổi kiểu của nó. Tuy nhiên, các thuộc tính, phương thức ở lớp con nhiều hơn lớp cha, do lớp con là cụ thể hóa của lớp cha. Do đó, các thuộc tính không có ở lớp cha sẽ nhận được giá trị rác không mong muốn. Ví dụ 1Kế thừaKế thừa nghĩa là thay vì một lớp dẫn xuất kế thừa từ một cơ sở lớp, lớp dẫn xuất này có thể có kế thừa từ nhiều cơ sở lớp khác nhau. Ví dụ như một loài động vật thì sẽ kế thừa những đặc điểm từ cả bố và 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 cơ sở hạ tầng lớp có thể có nhiều hơn 1, ngăn cách nhau bởi dấu phẩy (,). Ví dụ 2Khi kế thừa từ nhiều lớp cơ sở, bạn sẽ thấy một vấn đề phát sinh chính là khi lớp cơ sở có phương thức trùng tên, khi gọi phương thức sẽ xảy ra mơ hồ. Sự thật về mơ hồ là trình biên dịch mà bạn không biết bạn đang gọi phương thức từ lớp dẫn xuất nào. Ví dụ 3Để giải quyết vấn đề này, bạn có thể sử dụng thuật toán phạm vi (. ) to known method at class any as after 4Tổng kếtTrong phần kế thừa này, cơ bản của nó không khó, chỉ cần bạn phân tích đặc tả dữ liệu mà đề bài cho, hoặc trong tình huống thực tế, bạn sẽ làm được nó. Trong thời gian tới mình sẽ cố gắng tổng hợp các bài tập về phần này để các bạn nắm bắt được kế thừa trong C++ Vì thế là qua bài này, mình đã giới thiệu cho các bạn biết về kế thừa trong C++ nói riêng và trong lập trình hướng đối tượng nói chung. Hi vọng là các bạn đã thấy bài viết của mình đừng quên chia sẽ cho các bạn cùng biết nha Nếu có bất kỳ thắc mắc hay đóng góp ý kiến nào, các bạn có thể comment phía dưới bài viết. Cảm ơn các bạn đã đọc bài viết |
Bài Viết Liên Quan
Excel độ lệch chuẩn ngắn hạn
Nhập điểm vào một trong các cột trên bảng tính Excel (xem ví dụ bên dưới). Sau khi dữ liệu đã được nhập, đặt con trỏ ở nơi bạn muốn giá trị trung ...
Làm thế nào để bạn viết hoa mỗi câu trong python?
Xin chào các lập trình viên. Trong bài viết này, chúng ta sẽ tìm hiểu cách viết hoa chữ cái đầu tiên trong chuỗi trong Python. Có nhiều cách khác nhau để làm ...
Làm cách nào để cài đặt phiên bản mới nhất của phpmyadmin trên Ubuntu?
Jacob Nicholson đã làm việc ở tất cả các cấp của cả công ty lưu trữ web lớn và nhỏ. Với kiến thức nền tảng về mạng máy tính, anh ấy thích mọi ...
Vấn đề về php
Trong bài viết này, chúng ta sẽ tìm hiểu về cách xử lý lỗi (error) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình ...
Phiên bản phổ biến nhất của python
Python 2 ra mắt năm 2000 với những thay đổi lớn đối với việc lưu trữ mã nguồn. Nó giới thiệu nhiều tính năng mong muốn như hỗ trợ unicode, hiểu danh sách ...
Thao tác dữ liệu trong python ví dụ
Nếu bạn đang sử dụng Python và muốn phân tích dữ liệu, có thể bạn sẽ sử dụng thư viện Pandas. Và vì lý do chính đáng, vì Pandas là một công cụ nhanh ...
Vé bóng bầu dục World Cup 2023 dành cho người khuyết tật
📨 Chúng tôi sẽ cập nhật thường xuyên cho bạn về 𝐬𝐚𝐥𝐞𝐬 𝐞𝐯𝐨𝐥𝐮𝐭𝐢𝐨𝐧 trên tài khoản Twitter của chúng tôi @ France2023. 𝐀 ...
Is Apple releasing a new phone in 2023?
iPhone 15 không được mong đợi cho đến cuối năm 2023, nhưng chúng tôi đã có tin đồn về những thay đổi phần cứng có thể xảy ra. Chúng ta có thể thấy quá ...
Python mở pdf dưới dạng văn bản
Với bài viết này, chúng tôi sẽ kiểm tra một số trường hợp khác nhau về cách giải quyết vấn đề Trích xuất văn bản từ Pdf Python# pip3 install ...
Một bảng trong python là gì?
Các bảng trống có thể được tạo bằng hàm Table().with_columns( Number of petals, make_array(8, 34, 5), Name, make_array(lotus, sunflower, rose) ) 4. Một bảng ...
Cach stop khi ping trong linux
Người dùng có thể đã quá quen với việc sử dụng các lệnh ping trong Linux, tuy nhiên nó vẫn còn nhiều biến thể bổ sung khác có thể bạn chưa biết. Trong bài ...
Hoa cưới cầm tay 2023
Cưới hỏi Ngọc Linh xin giới thiệu đến bạn những mẫu cổng hoa cưới giấy đang thu hút sự quan tâm của nhiều cặp đôi nhất hiện nay.Bạn đang xem: Cách làm ...
Đàn tranh có bao nhiêu giây
Đàn tranh là một loại nhạc cụ dân tộc quan trọng trong âm nhạc dân gian của người Việt. Theo thời gian, đàn tranh được du nhập và cải tiến về chất ...
Tôi có nên học python từ sách hay video không?
Nói chung, mất khoảng hai đến sáu tháng để học các nguyên tắc cơ bản của Python. Nhưng bạn có thể học đủ để viết chương trình ngắn đầu tiên của ...
Trung tâm văn bản bootstrap 4
Gần đây, đã có rất nhiều cuộc thảo luận về những điểm mới trong Bootstrap 4 và tôi tò mò muốn xem xét sự khác biệt về hình thức và kiểu dáng. Dưới ...
Làm cách nào để xóa các ký tự unicode khỏi chuỗi trong python?
Bạn có thể đã gặp nhiều nghi ngờ và nhầm lẫn trong bài viết. Chúng tôi đảm bảo rằng mọi thắc mắc của bạn sẽ được giải quyết qua bài viết Xóa ký ...
Làm cách nào để truy cập trình kết nối mysql?
Để có thể thử nghiệm với các ví dụ mã trong hướng dẫn này, bạn nên cài đặt MySQL trên máy tính của mìnhBạn có thể tải xuống cơ sở dữ liệu MySQL ...
Biến trong python lớp 11 là gì
Chương trước đã giới thiệu sơ lược về giao diện người dùng của Python. Chương này sẽ khám phá bề nổi của lập trình Python và tiết lộ các yếu tố cơ ...
Chi tiết kia morning 1.25 exmt 2023 mới nhất
Đánh giá xe Kia Morning chi tiết nội ngoại thất vận hành, giá xe Kia Morning 2022 lăn bánh khuyến mãi mới. Mua xe Kia Morning 2022 trả góp 80%,Ls thấp.Dòng xe cỡ nhỏ ...
Biểu đồ phân tán nhiều cột excel
Một tình huống phổ biến là khi bạn muốn vẽ các giá trị X và Y trong biểu đồ trong Excel và cho biết hai giá trị này có liên quan như thế nàoĐiều này có ...