在C++中实际使用'protected'说明符

mec*_*nic 3 c++ protected

我知道这个说明符是如何工作的.

我对实际编程中这些东西的实际使用感兴趣.我无法想象任何受保护类成员真正需要的例子(我的意思是当我们不能用'private'替换'protected'时).

Ric*_*dle 12

一个类有两个API - 一个用于实例化它并使用结果对象的代码,另一个用于子类.

所述第一API是public成员,而第二个是publicprotected成员.有一些操作和数据可供子类访问,"普通用户"无法访问.

作为一个具体的例子,想象一下Windows GUI类库.它包装和隐藏普通的旧Windows API.A Window代表一个窗口,并具有一个HWND底层的Windows窗口句柄.它隐藏了类的HWND用户Window,因为它不属于他们的业务(或者如果他们可以使用它,它只通过只读访问器公开它).但是对于子类Window,FrameWindow或者是 EditControl,HWND直接访问它是可以的:

class Window
{
public:
    void Show();  // Example public API

protected:
    HWND m_hwnd;
};
Run Code Online (Sandbox Code Playgroud)

  • @SimonWhitehead:实际上有*三个*API :)用于客户端的公共,受保护的地方,您为派生类型提供服务,以及您的基础从派生类型获取服务的虚拟.您可以谷歌搜索NVI(非虚拟接口),讨论如何设计公共和虚拟接口+1 (4认同)