C++におけるpublic・private・protectedの違いをわかりやすく解説
データ隠蔽(データハイディング)は、オブジェクト指向プログラミング(OOP)の重要な機能の一つです。これにより、クラス型の内部表現へプログラム内の関数が直接アクセスすることを防ぐことができます。
クラスメンバーへのアクセス制限は、クラス本体内に記述する「public」「private」「protected」というアクセス指定子によって指定します。
メンバーおよびクラスのデフォルトのアクセスレベルはprivateです。
サンプルコード
class Base {
public:
// ここにpublicメンバーを記述
protected:
// ここにprotectedメンバーを記述
private:
// ここにprivateメンバーを記述
};
各アクセス指定子の特徴
public(パブリック)
publicメンバーは、プログラム内のクラス外部のどこからでもアクセスできます。メンバー関数を介さずに、public変数の値を設定・取得することも可能です。
private(プライベート)
privateメンバー変数や関数は、クラスの外部からアクセスすることはおろか、参照することすらできません。privateメンバーにアクセスできるのは、そのクラス自身とフレンド関数のみです。
protected(プロテクテッド)
protectedメンバー変数や関数は、privateメンバーと非常に似た性質を持っていますが、一つ大きな利点があります。それは、「派生クラス」と呼ばれる子クラスからもアクセスできるという点です。
アクセス範囲の比較まとめ
| アクセス指定子 | 同一クラス内 | 派生クラス | クラス外部 |
|---|---|---|---|
| public | ○ | ○ | ○ |
| protected | ○ | ○ | × |
| private | ○ | × | × |
このように、アクセス指定子を適切に使い分けることで、クラスの内部実装を保護しながら、継承関係にあるクラスには必要な機能だけを公開するという設計が可能になります。
-
C#におけるクラスと構造体の違いを徹底解説
C#におけるクラスと構造体の基本的な違い クラス(Class)と構造体(Struct)を正しく使い分けるためには、まず両者が「データの定義と保持」という点において、ほぼ同等の役割を果たすことを理解しておく必要があります。どちらもデータメンバーを定義し、既定値を保持することが可能です。しかしそれ以外の側面、たとえばメモリ管理や継承といった機能面で比較すると、クラスの方が構造体よりも柔軟性が高く、より多くの機能を提供しています。 以下の表に、クラスと構造体の重要な違いを6つの観点からまとめました。 番号項目クラス構造体 1データ型クラスで定義されたデータは、メモリ上に参照として格納され、ア
-
Javaにおける継承とコンポジション(構成)の違い徹底解説
Javaのオブジェクト指向設計において、「継承(Inheritance)」と「コンポジション(構成・Composition)」はどちらもコードの再利用性を実現する重要な手法です。しかし、その考え方や使い方には大きな違いがあります。コンポジションとは、あるクラスの中に別クラスのインスタンスをフィールドとして持たせる設計技法です。一方、継承とは、既存のクラスを拡張(extends)することで、親クラスのプロパティや動作を子クラスが引き継ぐ仕組みです。本記事では、両者の違いを比較表とサンプルコードを使ってわかりやすく解説します。継承とコンポジションの違い一覧No.比較項目継承(Inheritance