我如何才能创建一个可以访问另一个人的类功能而又用户无法访问该类的类?

时间:2019-05-15 16:40:35

标签: c++

我正在使用小型WinApi库,但这不会影响该问题。我有一个称为Window的类和一个称为WindowImage的类(用于光标和图标)。我希望Window类能够访问WindowImage内部的名为getHandle的函数,但我不希望我的库用户访问此函数。

我曾想过让Window成为WindowImage的朋友,但是在我的研究中,我读到这样做是一种不好的做法。 我还查找了代理类,但是从我的理解看来,这似乎并不是解决我的问题的方法。

1 个答案:

答案 0 :(得分:0)

friend是完成这项工作的工具。

friend可能是不良做法的唯一原因是,它可能表明存在设计缺陷;也许您根本不应该以这种方式做事?

如果您希望Window能够调用getHandle,但没有其他私有功能,您也可以这样做。您将getHandle设为一个公共函数,但使它接受一个(可能是默认值和未使用的)参数,该参数的类型具有私有构造函数,并使 that 类成为Window的朋友。

class Window;
class WindowImage;

class WindowFriendToken {
  WindowFriendToken() == default;  // Constructor is private but otherwise normal
  friend class WindowImage;  // So that other functions in WindowImage can call getHandle
  friend class Window;       // So functions in Window can call getHandle.
};

class WindowImage {
public:
    int getHandle(const WindowFriendToken& ={});
    .
    .
    .
};