C++のアクセス修飾子の違いを解説:public・private・protectedの使い分け
データ隠蔽(データハイディング)は、オブジェクト指向プログラミング(OOP)における重要な機能の一つです。これにより、プログラム内の関数がクラス型の内部表現に直接アクセスすることを防ぎ、カプセル化を実現できます。
クラスメンバーへのアクセス制限は、クラス本体内で指定される「アクセス修飾子」— public、private、protected の3つのセクションによって定義されます。
なお、クラスのメンバーおよびクラス自体のデフォルトのアクセスレベルは private です。つまり、明示的に指定しない限り、すべてのメンバーは非公開として扱われます。
基本的な構文例
class Base {
public:
// 公開メンバーはここに記述
protected:
// 保護メンバーはここに記述
private:
// 非公開メンバーはここに記述
};public(公開)メンバー
public メンバーは、クラスの外部からでも自由にアクセスできます。メンバー関数を使わずに、直接変数の値を読み書きすることが可能です。クラスが外部に対して提供するインターフェースは、主にこのセクションで定義します。
private(非公開)メンバー
private メンバーの変数や関数は、クラスの外部からアクセスすることはおろか、参照することさえできません。アクセスできるのは、そのクラス自身のメンバー関数と、friend 宣言された関数やクラスのみです。内部状態を外部から守りたい場合に使用します。
protected(保護)メンバー
protected メンバーは、private メンバーと非常に似た性質を持っていますが、一つ大きな違いがあります。それは、派生クラス(子クラス)からもアクセスできるという点です。継承関係において基底クラスの内部情報をサブクラスに利用させたい場合に便利です。
まとめ:アクセス範囲の比較
| アクセス修飾子 | 同じクラス内 | 派生クラス | クラス外 |
|---|---|---|---|
| public | ○ | ○ | ○ |
| protected | ○ | ○ | × |
| private | ○ | × | × |
適切なアクセス修飾子を選択することで、クラスの内部実装を隠蔽しながら、必要な部分だけを外部に公開する、安全で保守性の高いコード設計が可能になります。
-
C#におけるクラスと構造体の違いを徹底解説
C#におけるクラスと構造体の基本的な違い クラス(Class)と構造体(Struct)を正しく使い分けるためには、まず両者が「データの定義と保持」という点において、ほぼ同等の役割を果たすことを理解しておく必要があります。どちらもデータメンバーを定義し、既定値を保持することが可能です。しかしそれ以外の側面、たとえばメモリ管理や継承といった機能面で比較すると、クラスの方が構造体よりも柔軟性が高く、より多くの機能を提供しています。 以下の表に、クラスと構造体の重要な違いを6つの観点からまとめました。 番号項目クラス構造体 1データ型クラスで定義されたデータは、メモリ上に参照として格納され、ア
-
C#のinternal修飾子とprivate修飾子の違いを徹底解説!アクセス範囲の違いと使い分け
C#には、クラスのメンバー(変数やメソッド)へのアクセス範囲を制御するための「アクセス修飾子」がいくつか用意されています。その中でもよく使われるのが internal(内部) と private(プライベート) です。この2つはどちらも外部からのアクセスを制限する役割を持ちますが、アクセスを許可する範囲が大きく異なります。本記事では、それぞれの特徴とコード例を通じて、両者の違いをわかりやすく解説します。 internal修飾子(内部アクセス指定子)とはinternal修飾子を付けたメンバーは、同じアセンブリ(プロジェクト)内であれば自由にアクセスできる ようになります。つまり、同一アプリケーシ