Giả sử tôi có ba lớp C++ FooA, FooB và FooC.Cho phép một lớp "bạn" chỉ truy cập một số thành viên riêng tư
FooA có chức năng thành viên có tên Hello
, tôi muốn gọi hàm này trong lớp FooB, nhưng tôi không muốn lớp FooC có thể gọi nó. Cách tốt nhất tôi có thể tìm ra để nhận ra điều này là tuyên bố FooB là một lớp người bạn của FooA. Nhưng miễn là tôi làm điều này, tất cả Thành viên riêng tư và được bảo vệ của FooA sẽ bị lộ diện, điều này hoàn toàn không thể chấp nhận đối với tôi.
Vì vậy, tôi muốn biết nếu có bất kỳ cơ chế nào trong C++ (03 hoặc 11) tốt hơn lớp học friend
có thể giải quyết tình huống khó xử này.
Và tôi cho rằng nó sẽ được tốt đẹp nếu cú pháp sau có thể:
class FooA
{
private friend class FooB:
void Hello();
void Hello2();
private:
void Hello3();
int m_iData;
};
class FooB
{
void fun()
{
FooA objA;
objA.Hello() // right
objA.Hello2() // right
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};
class FooC
{
void fun()
{
FooA objA;
objA.Hello() // compile error
objA.Hello2() // compile error
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};
Không, không có điều đó, theo như tôi biết. –
@summereno: Vì vậy, có thể là một người bạn và họ có nhiều khả năng làm điều đó. –