Kế thừa C ++

C Inheritance



Tính kế thừa là một đặc điểm rất quan trọng của lập trình hướng đối tượng. Nó cho phép lập trình viên lấy một lớp từ một lớp hiện có. Điều này rất hữu ích, đặc biệt là trong một dự án phức tạp lớn vì nó cho phép lập trình viên sử dụng lại mã.

Trong bài này, chúng ta sẽ thảo luận về khái niệm kế thừa trong lập trình C ++. Chúng tôi sẽ giải thích khái niệm về hàm friend trong C ++ với các ví dụ làm việc.







Tại sao Thừa kế?

Kế thừa cho phép tạo một lớp mới hoặc lớp dẫn xuất từ ​​một lớp khác hoặc lớp cơ sở. Lớp dẫn xuất hoặc lớp con sẽ có tất cả các tính năng của lớp cha hoặc lớp cơ sở. Chúng tôi có thể sử dụng lại mã với sự trợ giúp của kế thừa.



Loại thừa kế

Có nhiều loại kế thừa khác nhau:



  1. Thừa kế Đơn giản / Đơn lẻ
  2. Kế thừa thứ bậc
  3. Kế thừa đa cấp
  4. Nhiều người thừa kế

Trong bài viết này, chúng ta sẽ chỉ xem xét kế thừa đơn / đơn.





Ví dụ 1:

Bây giờ, chúng ta hãy xem xét một chương trình ví dụ để hiểu khái niệm kế thừa trong C ++. Chúng tôi đã định nghĩa một lớp cơ sở và sau đó dẫn xuất một lớp khác từ nó. Do đó, lớp dẫn xuất sẽ có các tính năng (thành viên và chức năng) từ lớp cơ sở.

#bao gồm

sử dụng không gian tên std;

lớp Base_Class
{
công cộng:
NStôi;
vô hiệutrưng bày()
{
Giá cả<< 'Hiển thị Lớp Cơ sở' <<tôi<<endl;
}

};

class Derived_Class:Public Base_Class
{
công cộng:
vô hiệuchỉ()
{
Giá cả<< 'Show of Derived Class' <<endl;
}
};

NSchủ chốt()
{
Derived_Class dc;
dc.tôi = 100;
dc.trưng bày();
dc.chỉ();

trở lại 0;
}



Ví dụ 2:

Đây là một ví dụ khác về kế thừa trong C ++. Trong ví dụ này, chúng ta sẽ xem các hàm tạo được gọi như thế nào khi một đối tượng lớp dẫn xuất được tạo.

Như bạn có thể thấy bên dưới, chúng tôi đã xác định hai hàm tạo lớp cơ sở và ba hàm tạo lớp dẫn xuất. Bạn có thể nhận thấy rõ ràng từ đầu ra bên dưới rằng hàm tạo lớp cơ sở được gọi đầu tiên trước khi hàm tạo lớp dẫn xuất được gọi.

#bao gồm
sử dụng không gian tên std;

lớp Base_Class
{
công cộng:
Base_Class()
{
Giá cả<< 'Base_Class - No Parameters' <<endl;
}
Base_Class(NSNS)
{
Giá cả<< 'Base_Class - Tham số:' <<NS<<endl;
}
};

class Derived_Class:Public Base_Class
{
công cộng:
Lớp có nguồn gốc()
{
Giá cả<< 'Derived_Class - No Parameters' <<endl;
}
Lớp có nguồn gốc(NS)
{
Giá cả<< 'Derived_Class - Tham số:' <<<<endl;
}
Lớp có nguồn gốc(NSNS,NS):Base_Class(NS)
{
Giá cả<< 'Param of Derived_Class:' <<<<endl;
}
};

NSchủ chốt()
{
Derived_Class d(7,19);
}

Ví dụ 3:

Trong ví dụ này, chúng ta sẽ xem các đối tượng lớp dẫn xuất có thể được sử dụng như thế nào.

Như bạn có thể thấy, có hai lớp được định nghĩa: Rectangle_Class và Cube_Class. Rectangle_Class là lớp cơ sở mà từ đó lớp dẫn xuất, tức là Cube_Class được dẫn xuất. Do đó, chúng tôi đang kế thừa các tính năng từ Rectangle_Class sang Cube_Class.

Ngoài ra, bạn có thể nhận thấy rằng chúng tôi đang kế thừa Cube_Class với quyền kiểm soát truy cập công khai. Điều này có nghĩa là lớp dẫn xuất có thể truy cập tất cả các thành viên không riêng tư của lớp cơ sở.

Chúng ta đã khai báo một đối tượng của lớp dẫn xuất và sau đó gọi các phương thức từ lớp cơ sở, tức là setLength () và setBreadth ().

#bao gồm

sử dụng không gian tên std;

lớp Rectangle_Class
{
riêng:
NSchiều dài;
NSbề rộng;
công cộng:
Rectangle_Class();
Rectangle_Class(NSNS,NSNS);
Rectangle_Class(Rectangle_Class&NS);
NSgetLength()
{
trở lạichiều dài;
}
NSgetBreadth()
{
trở lạibề rộng;
}
vô hiệusetLength(NSNS);
vô hiệusetBreadth(NSNS);
NSkhu vực();
};

lớp Cube_Class:public Rectangle_Class
{
riêng:
NSChiều cao;
công cộng:
Cube_Class(NSNS)
{
Chiều cao=NS;
}
NSgetHeight()
{
trở lạiChiều cao;
}
vô hiệusetHeight(NSNS)
{
Chiều cao=NS;
}
NSâm lượng()
{
trở lạigetLength()*getBreadth()*Chiều cao;
}
};


Rectangle_Class::Rectangle_Class()
{
chiều dài=1;
bề rộng=1;
}
Rectangle_Class::Rectangle_Class(NSNS,NSNS)
{
chiều dài=NS;
bề rộng=NS;
}
Rectangle_Class::Rectangle_Class(Rectangle_Class&NS)
{
chiều dài=NS.chiều dài;
bề rộng=NS.bề rộng;
}
vô hiệuRectangle_Class::setLength(NSNS)
{
chiều dài=NS;
}
vô hiệuRectangle_Class::setBreadth(NSNS)
{
bề rộng=NS;
}
NSRectangle_Class::khu vực()
{
trở lạichiều dài*bề rộng;
}

NSchủ chốt()
{
Cube_Class c(số 8);
NS.setLength(12);
NS.setBreadth(9);
Giá cả<<'Âm lượng là'<<NS.âm lượng()<<endl;
}

Phần kết luận:

Trong bài viết này, tôi đã giải thích khái niệm Thừa kế trong C ++ . C ++ hỗ trợ các kiểu kế thừa khác nhau bao gồm đa kế thừa (tức là kế thừa các tính năng từ nhiều lớp cơ sở hoặc lớp cha). Tuy nhiên, để đơn giản hơn, ở đây tôi chỉ xét đến thừa kế đơn lẻ. Tôi đã chỉ ra ba ví dụ làm việc để giải thích cách chúng ta có thể sử dụng kế thừa trong lập trình C ++ và sử dụng lại mã. Hơn nữa, đây là một tính năng rất hữu ích của C ++.