Tất cả những gì bạn cần biết về tính kế thừa trong C ++



Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về Kế thừa trong C ++, đó là nhiều kiểu khác nhau và cách triển khai.

C ++ là một ngôn ngữ hướng đối tượng. Trừu tượng hóa dữ liệu, Đa hình, Đóng gói và Kế thừa là những nền tảng của OOP. Trong bài này, chúng ta sẽ hiểu thừa kế là gì? Các kiểu kế thừa trong C ++ và tất cả các khái niệm cần thiết liên quan đến nó từ đầu. Cuối cùng, chúng tôi cũng sẽ xem xét nhược điểm của khái niệm mạnh mẽ này và cố gắng giải quyết nó.

Kế thừa trong C ++ là gì

Kế thừa là một trong những khái niệm mạnh mẽ và được sử dụng rộng rãi nhất trong C ++ hoặc bất kỳ ngôn ngữ hướng đối tượng nào khác. Để hiểu khái niệm này cần một chút kiến ​​thức về các lớp và đối tượng. Sử dụng Kế thừa, chúng ta có thể tạo một lớp bao gồm các phương thức và thuộc tính chung. Lớp này có thể được kế thừa bởi các lớp khác chứa các phương thức cụ thể hơn.





Kế thừa trong C ++

Bằng cách làm này, chúng tôi không phải viết đi viết lại các chức năng giống nhau, điều này giúp tiết kiệm thời gian và tăng khả năng đọc của mã.



Cú pháp:

class origin_class: access_type base_class {// class body}

Lớp cơ sở: Lớp bao gồm tất cả các phương thức và thuộc tính chung có thể được chia sẻ bởi các lớp khác để tăng khả năng đọc mã được gọi là lớp cơ sở.

Lớp có nguồn gốc: Lớp bao gồm các phương thức cụ thể hơn và kế thừa một lớp được gọi là lớp dẫn xuất. Một lớp dẫn xuất cũng có thể là một lớp cơ sở cho một số lớp dẫn xuất khác.



Nếu chúng ta tạo một lớp XYZ, với một số thuộc tính và phương thức. Bây giờ một sinh viên trong lớp sẽ có một số thuộc tính khác, nhưng nó cũng sẽ bao gồm các phần tử của lớp XYZ và tương tự đối với lớp giảng viên. Hãy xem một sơ đồ:

Vì vậy, lớp sinh viên và giảng viên sẽ kế thừa từ XYZ.

Bộ định danh truy cập- Chúng ta đã hiểu cách một lớp có thể kế thừa một lớp khác. Nhưng một số người có thể nói rằng đó là một phương thức không an toàn vì tất cả các thuộc tính và phương thức của lớp cơ sở hoặc lớp cha được chia sẻ với lớp con hoặc lớp dẫn xuất. Ví dụ: nếu một lớp ‘Ngân hàng’ được kế thừa bởi lớp ‘khách hàng’ và ‘nhà đầu tư’. Các thuộc tính của lớp ‘Ngân hàng’ như ‘mật mã’, thông tin khác liên quan đến khách hàng và dữ liệu cá nhân được chia sẻ với ‘khách hàng’ và lớp ‘nhà đầu tư’ là không an toàn.

Để giải quyết vấn đề trên, C ++ sử dụng các chỉ định truy cập để giới hạn quyền truy cập của các thuộc tính lớp cơ sở vào lớp dẫn xuất. Có tổng cộng 3 loại chỉ định truy cập trong C ++

  1. Công cộng
  2. Riêng tư
  3. Được bảo vệ

Bảng dưới đây sẽ cho bạn hiểu rõ về kiểu dữ liệu nào có thể được truy cập bởi lớp dẫn xuất theo các chỉ định truy cập khác nhau.

Thông số truy cập Dữ liệu công khai Dữ liệu cá nhân Dữ liệu được bảo vệ
Riêng tư Không được kế thừaKhông được kế thừaKhông được kế thừa
Được bảo vệ Được bảo vệ Riêng tư Được bảo vệ
Công cộng Công cộng Riêng tư Được bảo vệ

Thừa kế duy nhất

Kế thừa đơn có thể được coi là hình thức kế thừa đơn giản. Trong kế thừa đơn, một lớp kế thừa từ một lớp cơ sở.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Trường hợp kế thừa này được gọi là thừa kế Đa cấp. Lớp ở giữa lớp đầu tiên và lớp cuối cùng còn được gọi là lớp cơ sở trung gian.Bạn nghĩ sao, lớp cuối cùng có thể kế thừa các thành viên của lớp đầu tiên không? Có, nó có thể

máy quét java nhận ký tự tiếp theo
#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Đầu ra:

Giá trị của a = 10

Giá trị của b = 20

Giá trị của c = 30

Giá trị của d = 50

Kế thừa thứ bậc

Một số vấn đề không thể được giải quyết với sự trợ giúp của kế thừa đơn hoặc đa cấp. Trong kế thừa phân cấp, nhiều hơn 1 lớp kế thừa từ một lớp cơ sở duy nhất.

#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Đầu ra:

Chúng tôi đang học Đại học

Chúng tôi đang học Đại học

Kế thừa nhiều trong C ++

Chúng ta đã thấy trong kế thừa phân cấp một lớp cơ sở có nhiều hơn một lớp dẫn xuất. Trong nhiều Kế thừa, một lớp dẫn xuất có nhiều hơn một lớp cơ sở.

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < Tại thời điểm này, chúng ta đã hiểu rõ về tất cả các kiểu kế thừa được sử dụng trong C ++. Nhưng, đợi gì nếu chúng ta muốn sử dụng 2 kiểu thừa kế khác nhau? Nó có khả thi không? Có, có thể với sự trợ giúp của Thừa kế lai. Trong Thừa kế lai, chúng ta kết hợp 2 kiểu thừa kế khác nhau. Ví dụ- Đa cấp và đa kế thừa, Phân cấp và đa kế thừa, v.v.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} class Country {protected: int d public: void getinfoCountry (int m) {d = m}} class Australia: public Continent, public Country {public: void Display () {std :: cout<< 'Value of a = ' < 

Hãy hiểu sơ đồ trên sẽ giúp chúng ta hiểu được vấn đề về kim cương. lớp B và lớp C kế thừa từ lớp A do đó cả lớp A và lớp B đều có các thuộc tính và phương thức của lớp A. nếu lớp D kế thừa từ Lớp B cũng như lớp C. Lớp D sẽ có tất cả các thuộc tính của lớp B và lớp C. Nó cũng có tất cả các thuộc tính của lớp A được kế thừa từ lớp B cũng như lớp C. do đó nếu chúng ta tạo một đối tượng của lớp D và gọi một phương thức của lớp A. một tình huống không rõ ràng sẽ được tạo ra và trình biên dịch sẽ bị nhầm lẫn từ đâu nó nên lớp phương thức của A, từ lớp B hoặc lớp D.

Để giải quyết sự mơ hồ này, chúng tôi sử dụng một khái niệm gọi là lớp cơ sở ảo. Khi chúng ta tạo một lớp cơ sở trở thành lớp cơ sở ảo, chỉ một bản sao của lớp đó được kế thừa bất kể số lượng đường dẫn hiện có giữa lớp cơ sở ảo và lớp dẫn xuất.

class A {} class B: virtual public A {} class C: virtual public A {} class D: public C, public D {}

Với điều này, chúng ta sẽ kết thúc bài viết Kế thừa trong C ++ này. Nếu bạn muốn tìm hiểu thêm, hãy xem bởi Edureka, một công ty học trực tuyến đáng tin cậy. Khóa đào tạo và cấp chứng chỉ Java J2EE và SOA của Edureka được thiết kế để đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung công tác Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.