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ề kế thừa 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 <iostream>
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, có thể thấy những điểm sau:

  • base có ba biến thành viên: x, yz với chỉ định truy xuất lần lượt là public, protectedprivate.
  • publicDerived kế thừa biến xy 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 xy. Cả hai biến đều có kiểu protected. z không thể được kế thừa.

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

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

Nếu chúng ta kế thừa một lớp derivedFromPrivateDerived từ privateDerived, biến x và y sẽ không được kế thừa 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 kế thừa? không
Truy xuất từ lớp kế thừa đờ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 kế thừa? không

có 

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

Truy xuất từ lớp kế thừa đờ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 kế thừa? không

có 

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

có 

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

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

 

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải