3

この指定子がどのように機能するかを知っています。

私は、実際のプログラミングでこのようなものを実際に使用することに興味があります。保護されたクラスメンバーが本当に必要な例は想像できません (「保護」を「プライベート」に置き換えることができない場合を意味します)。

4

1 に答える 1

12

クラスには 2 つの API があります。1 つはクラスをインスタンス化し、結果のオブジェクトを使用するコード用で、もう 1 つはサブクラス用です。

最初の API はpublicメンバーで、2 番目の API はpublicandprotectedメンバーです。サブクラスがアクセスしても問題なく、「一般ユーザー」がアクセスできない操作やデータがあります。

具体的な例として、Windows GUI クラス ライブラリを想像してください。プレーンな古い Windows API をラップして非表示にします。AWindowはウィンドウを表し、HWND基礎となる Windows ウィンドウ ハンドルである を持っています。HWNDクラスのユーザーには関係ないため、クラスのユーザーから隠されますWindow(または、ユーザーが使用しても問題ない場合は、読み取り専用アクセサーを介してのみ公開します)。しかし、や のWindowようなのサブクラスがに直接アクセスしても問題ありません。FrameWindowEditControlHWND

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

protected:
    HWND m_hwnd;
};
于 2013-04-02T22:13:28.133 に答える