默认情况下,类的成员在c++中是private。

因此,我想知道是否可以创建一个默认情况下将其所有成员(变量和函数)设置为私有(private)的类。

换句话说,是否存在没有任何关键字publicprotectedprivate的有意义的类定义?

最佳答案

有一种基于该类的模式用于访问保护:有时称为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
  }
};

10-08 19:57