3

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

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

4

1 回答 1

12

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

第一个 API 是public成员,而第二个是publicprotected成员。有些操作和数据是子类可以访问的,而“普通用户”则不能访问。

作为一个具体的例子,想象一个 Windows GUI 类库。它包装并隐藏了普通的旧 Windows API。AWindow代表一个窗口,并且有一个HWNDwhich 是底层的 Windows 窗口句柄。HWND它对类的用户隐藏Window,因为这不关他们的事(或者如果他们可以使用它,它只通过只读访问器公开它)。但是Window,像FrameWindowor 的子类可以直接EditControl访问HWND

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

protected:
    HWND m_hwnd;
};
于 2013-04-02T22:13:28.133 回答