1. Trang chủ
  2. » Công Nghệ Thông Tin

Phạm vi truy nhập đến các thành phần của lớp cơ sở

3 596 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phạm vi truy nhập đến các thành phần của lớp cơ sở
Thể loại Bài giảng
Định dạng
Số trang 3
Dung lượng 16,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các từ khoá quy định phạm vi truy nhập của lớp cơ sở + Mặc dù lớp dẫn xuất được thừa kế tất cả các thành phần của lớp cơ sở, nhưng trong lớp dẫn xuất không thể truy nhập tới tất cả các t

Trang 1

Phạm vi truy nhập đến các thành phần của lớp cơ sở

3.1 Các từ khoá quy định phạm vi truy nhập của lớp cơ sở

+ Mặc dù lớp dẫn xuất được thừa kế tất cả các thành phần của lớp cơ sở, nhưng trong lớp dẫn xuất không thể truy nhập tới tất cả các thành phần này Giải pháp thường dùng là sử dụng các phương thức của lớp cở sở để truy nhập đến các thuộc tính của chính lớp cơ sở đó Cũng

có thể sử dụng các giải pháp khác dưới đây

+ Các thành phần private của lớp cở sở không cho phép truy nhập trong lớp dẫn xuất

+ Các thành phần public của lớp cơ sở có thể truy nhập bất kỳ chỗ nào trong chương trình Như vậy trong các lớp dẫn xuất có thể truy nhập được tới các thành phần này

+ Các thành phần khai báo là protected có phạm vi truy nhập rộng hơn so với các thành phần private, nhưng hẹp hơn so với các thành phần public Các thành phần protected của một lớp chỉ được mở rộng phạm vi truy nhập cho các lớp dẫn xuất trực tiếp từ lớp này

3.2 Hai kiểu dẫn xuất

Có 2 kiểu dẫn xuất là private và public, chúng cho các phạm vi truy nhập khác nhau tới lớp

cơ sở Cụ thể như sau:

+ Các thành phần public và protected của lớp cơ sở sẽ trở thành các thành phần public và protected của lớp dẫn xuất theo kiểu public

+ Các thành phần public và protected của lớp cơ sở sẽ trở thành các thành phần private của lớp dẫn xuất theo kiểu private

Ví dụ :

Giả sử lớp A có:

thuộc tính public a1

thuộc tính protected a2

và lớp B dẫn xuất public từ A, thì A::a1 trở thành public trong B, A::a2 trở thành protected trong B

Do đó nếu dùng B làm lớp cở để xây dựng lớp C Thì trong C có thể truy nhập tới A::a1 và A::a2

Thế nhưng nếu sửa đổi để B dẫn xuất private từ A, thì cả A::a1 và A::a2 trơ thành private trong B, và khi đó trong C không được phép truy nhập tới các thuộc tính A::a1 và A::a2

Để biết tường tận hơn, chúng ta hãy biên dịch chương trình:

//CT5-04

// Pham vi truy nhap

#include <conio.h>

#include <iostream.h>

#include <string.h>

class A

{

protected:

int a1;

public:

Trang 2

int a2;

A()

{

a1=a2=0;

}

A(int t1, int t2)

{

a1=t1; a2= t2;

}

void in()

{

cout << a1 <<" " << a2 ;

}

} ;

class B: private A

{

protected:

int b1;

public:

int b2;

B()

{

b1=b2=0;

}

B(int t1, int t2, int u1, int u2)

{

a1=t1; a2=t2; b1=u1;b2=u2;

}

void in()

{

cout << a1 <<" " << a2 << " " << b1 << " " << b2;

}

} ;

class C : public B

{

public:

C()

{

Trang 3

}

C(int t1, int t2, int u1,int u2)

{

a1=t1; a2=t2; b1=u1;b2=u2;

}

void in()

{

cout << a1;

cout <<" " << a2 << " " << b1 << " " << b2;

}

};

void main()

{

C c(1,2,3,4);

c.in();

getch();

}

Chúng ta sẽ nhận được 4 thông báo lỗi sau trong lớp C (tại hàm tạo có đối và phương thức in):

A::a1 is not accessible

A::a2 is not accessible

A::a1 is not accessible

A::a2 is not accessible

Bây giờ nếu sửa đổi để lớp B dẫn xuất public từ A thì chương trình sẽ không có lỗi và làm việc tốt

Ngày đăng: 24/10/2013, 15:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w