5

将类定义为朋友类时,定义放置在哪个访问器部分是否重要,如果是这样,是否会更改朋友有权访问的成员?

class aclass
{
private:
   // friend bclass;

public:
   // friend bclass;

protected:
   // friend bclass;
};

class bclass
{};
4

4 回答 4

3

访问说明符不适用于友元函数/类
您可以在任何访问说明符下声明元函数或类,并且函数/类仍然可以访问该类的所有成员变量(公共、受保护和私有)。

于 2011-04-07T04:35:36.053 回答
2

一旦你将朋友类/函数放在给定类(比如'aclass')中的任何地方。它将可以访问该类的所有已定义成员(无论是公共/私有/受保护的);例如:

class aClass
{
public: int pub;  void fun1() {}
protected: int pro; void fun2() {}
private: int pri;  aClass(const aClass& o);  
  friend void outsider ();  
};

好友函数 outsider() 可以访问 pub、pro、pri、fun1、fun2;但在这种情况下不是 aClass 复制构造函数(如果它没有在任何地方定义)。

于 2011-04-07T03:48:34.473 回答
1

按照惯例,友元函数不会放在任何访问器中,因为根据定义,它们不是类的一部分。你可能会做这样的事情:

class Elephants
{
 //friend void notAMemberFuncion(argument 123);

public:
// member functions;

protected:
// data members;
};
于 2011-04-07T03:38:52.600 回答
1

朋友类/函数可以访问类的所有私有/受保护/公共成员,朋友类/函数放置在哪个访问部分没有任何区别。建议将朋友类/函数放在公共部分,因为朋友是类接口的一部分。

于 2011-04-07T03:57:12.883 回答