默认情况下,类的成员在c++中是private。
因此,我想知道是否可以创建一个默认情况下将其所有成员(变量和函数)设置为私有(private)的类。
换句话说,是否存在没有任何关键字public
,protected
或private
的有意义的类定义?
最佳答案
有一种基于该类的模式用于访问保护:有时称为passkey pattern(另请参见clean C++ granular friend equivalent? (Answer: Attorney-Client Idiom)和How to name this key-oriented access-protection pattern?)。
只有 key 类的 friend 可以访问protectedMethod()
:
// All members set by default to private
class PassKey { friend class Foo; PassKey() {} };
class Bar
{
public:
void protectedMethod(PassKey);
};
class Foo
{
void do_stuff(Bar& b)
{
b.protectedMethod(PassKey()); // works, Foo is friend of PassKey
}
};
class Baz
{
void do_stuff(Bar& b)
{
b.protectedMethod(PassKey()); // error, PassKey() is private
}
};