Chi tiết bài học Kế thừa với public, protected và private trong lập trình C++

Kế thừa với public, protected và private trong lập trình C++

Trong bài này, bạn sẽ được học về thừa kế với public, protected và private trong C + +. Bạn sẽ được học nơi nào và khi nào nó được sử dụng, kèm theo ví dụ .

Bạn có thể khai báo một lớp kế thừa từ một lớp chính với điều khiển truy xuất khác nhau, nghĩa là kế thừa với public, kế thừa với protected và kế thừa với private.

#include 
using namespace std;

class base
{
.... ... ....
};

class derived : chỉ_định_truy_xuất base
{
.... ... ....
};

Lưu ý: Tất cả các từ khóa public, protected hay private đều được sử dụng tại vị trí từ khóa chỉ_định_truy_xuất ở đoạn mã trên.

Ví dụ sử dụng kế thừa với public, protected và private trong C++

class base 
{
	public:
		int x;
	protected:
		int y;
	private:
		int z;
};

class publicDerived: public base
{
	// x có kiểu public
	// y có kiểu protected
	// z không thể được truy xuất từ publicDerived
};

class protectedDerived: protected base
{
	// x có kiểu protected
	// y có kiểu protected
	// z không thể được truy xuất từ protectedDerived
};

class privateDerived: private base
{
	// x có kiểu private
	// y có kiểu private
	// z không thể được truy xuất từ privateDerived
}

Trong ví dụ trên, hoàn toàn có thể thấy những điểm sau :

  • base có ba biến thành viên: x, y và z với chỉ định truy xuất lần lượt là public, protected và private.

  • publicDerived kế thừa biến x và y với kiểu public và protected. Trong khi z không được kế thừa vì nó là một biến private của base.

  • protectedDerived kế thừa biến x và y. Cả hai biến đều có kiểu protected. z không thể được kế thừa.

Nếu tất cả chúng ta thừa kế một lớp derivedFromProtectedDerived từ lớp protectedDerived, biến x và y cũng sẽ được thừa kế trong lớp thừa kế đó .

  • privateDerived kế thừa biến x và y. Cả hai đều có kiểu private. z không được kế thừa.

Nếu tất cả chúng ta thừa kế một lớp derivedFromPrivateDerived từ privateDerived, biến x và y sẽ không được thừa kế vì chúng là biến private của privateDerived .

Khả năng truy xuất trong kế thừa với public

Khả năng truy xuất

Biến private

Biến protected

Biến public

Truy xuất từ chính lớp đó ?

Truy xuất từ lớp thừa kế ?

không

Truy xuất từ lớp thừa kế đời thứ 2

không

Khả năng truy xuất trong kế thừa với protected

Khả năng truy xuất

Biến private

Biến protected

Biến public

Truy xuất từ chính lớp đó ?

Truy xuất từ lớp thừa kế ?

không


( thừa kế dưới dạng những biến protected )

Truy xuất từ lớp thừa kế đời thứ 2

không

Khả năng truy xuất trong kế thừa với private

Khả năng truy xuất

Biến private

Biến protect

Biến public

Truy xuất từ chính lớp đó ?

Truy xuất từ lớp thừa kế ?

không


( thừa kế dưới dạng biến private )

( thừa kế dưới dạng những biến private )

Truy xuất từ lớp thừa kế đời thứ 2

không

không

không