Giả sử chúng ta có hai lớp:Làm cách nào để lớp học chỉ có thể truy cập một số thành viên riêng tư của một lớp học khác?
class Base
{
private:
int x;
public:
void f();
};
class Foo
{
// some variables and methods
};
Bây giờ tất cả mọi người có thể gọi Base::f()
, nhưng tôi muốn chỉ Foo
để có thể làm như vậy.
Để đạt được hiệu ứng này, chúng ta có thể làm cho Base::f()
tin và tuyên bố Foo
làm bạn bè:
class Base
{
private:
int x;
void f();
friend Foo;
};
Vấn đề với phương pháp này là Foo
có quyền truy cập vào cả hai Base::f()
và Base::x
(và thậm chí để bất kỳ thành viên riêng tư nào khác của Base
). Nhưng tôi muốn Foo
chỉ có quyền truy cập vào Base::f()
.
Có cách nào cho một lớp học (hoặc một hàm) chỉ cấp quyền truy cập cho một số thành viên riêng tư của một lớp khác không? Hoặc có lẽ ai cũng có thể đề xuất một cách tiếp cận tốt hơn cho vấn đề của tôi?
EDIT:
Tôi sẽ cố gắng để xác định hạn chế quyền truy cập tôi cần. Thứ nhất, Base
là một giao diện trong một thư viện (đó là một lớp trừu tượng, trên thực tế). Người dùng chỉ sử dụng các lớp bắt nguồn từ Base
. Base::f()
chỉ được gọi là Foo
là một lớp khác trong thư viện. Ẩn Base::f()
từ người dùng là quan trọng, bởi vì chỉ Foo
biết khi nào nên gọi nó. Đồng thời, Foo
không được làm hỏng các thành viên khác của Base
.
Bạn có thể bảo vệ 'f()' và sử dụng quyền thừa kế được bảo vệ mà tôi nghĩ. – chris
Nhưng 'Foo' không xuất phát từ' Base'. – miloszmaki
Đó chỉ là một ý nghĩ. Bạn sẽ phải lấy nó. Sau khi nhìn thấy câu trả lời 'BaseData', tôi sẽ đi với điều đó. – chris