そもそも語彙の問題があると思います。
C++ (およびほとんどの言語) では、 aclass
は atype
です。実際に何かを構築するための設計図と考えることができます。
- 保持されている属性について説明します
- それらの属性を操作するメソッドについて説明します
- 適用される制限について説明します。これが「アクセシビリティ」です。
Anobject
は、実際にクラスをインスタンス化することによって生成されます。つまり、ブループリントが記述したものを構築します。それは多かれ少なかれ属性の束です。同じ設計図からいくつかの家を持つことができるように、同じクラスのいくつかのオブジェクトを持つことができます: 明らかな理由で物理的な場所が異なることに注意してください :)
では、アクセシビリティについて。public
アクセシビリティには、 、 、の 3 つの一般的なレベルがありprotected
ますprivate
。
public
は、予想どおり、全員が属性またはメソッドのいずれかにアクセスできることを意味します
protected
やや自明ではありません。これは、オブジェクトまたはその子のみが属性 (悪い考え*) またはメソッドにアクセスできることを意味します。(さらに、C++ では、friend
s)
private
そのクラスのオブジェクト (およびその子ではない) のみが属性またはメソッドにアクセスできることを意味します (さらに、C++ では、friend
s)
注: アクセシビリティのレベルに関係なく、オブジェクトは同じクラスのオブジェクトのすべての属性とメソッドに無制限にアクセスできます。
(*) ときどきポップアップしますが、protected
属性を使用するのは一般的に悪い考えです。カプセル化のポイントは、詳細を隠すことです。これは、そのためだけでなく、データにアクセスできるユーザーを正確に制御することで、クラスがその不変条件(単純な例では、サイズを格納する配列) を維持できるようにするためです。個別に、「サイズ」が実際に配列内のアイテムの数を常に表していることを確認する必要があります)。注: この制限は、たとえば C# のように階層を封印できる場合には適用されません。