C 言語でプログラムを書いた経験のある方ならば、クラスとは struct の概念を拡張したものを考えるとわかりやすいでしょう。struct には char や int のような事前定義されたデータ型が含まれ、他の struct 型が含まれる場合もあります。C++ では、struct 型はデータを格納するデータ型だけでなく、データを操作する演算にも使用できます。C++ のキーワードである class は、C の struct と似ています。使い方としては、多くのプログラマは、C と互換性のある struct 型を表すのに struct を使用し、C では使用できない C++ 機能を持つ struct 型を表すのに class を使用しています。
C++ には、「データの抽象化」の手段としてクラスが用意されています。プログラムのデータとしてどのような型 (クラス) がいいかを最初に決定し、次にそれぞれの型が必要とする演算を決定します。つまり、C++ クラスはユーザーが定義するデータ型と言えます。
たとえば 大きな整数の演算を行う BigNum というクラスを定義する場合、クラス BigNum のオブジェクトと一緒に使用したときだけ意味を持つ + 演算子を定義できます。n1 と n2 が BigNum という型のオブジェクトである場合、次の式は BigNum で定義した + 演算子によって値が決まります。
n1 + n2
operator +() が定義されていないと、クラスの型に対して + 演算は実行できません。+ 演算子は、int、long、float などの組み込み数値型に対してのみ事前定義されています。
このように複数の定義を持つ演算子を「多重定義演算子」と呼びます。
C++ クラスのデータ記憶要素は、「データメンバー」と呼ばれます。演算には、関数と多重定義された組み込み演算子 (特殊な関数) の両方が含まれます。関数は、クラスの一部として宣言されたメンバー関数であることもあれば、クラスの外で宣言される非メンバー関数であることもあります。メンバー関数は、クラスのメンバーにだけ作用します。クラスの非公開メンバーまたは限定公開メンバーに直接アクセスする必要がある場合は、非メンバー関数は「フレンド関数」として宣言されなければなりません。
クラスメンバーへのアクセスのレベルは、public (公開)、private (非公開)、protected (限定公開) という「メンバーアクセス指示子」を使って指定できます。公開メンバーは、プログラム内のすべての関数で使用できます。非公開メンバーを使用できるのは、クラスのメンバー関数とフレンド関数だけです。限定公開メンバーを使用できるのは、基底クラスのメンバー関数とフレンド関数、および派生クラスのメンバー関数とフレンド関数だけです。同じアクセス指示子を基底クラスに適用すると、影響を受ける基底クラスのすべてのメンバーに対するアクセスを限定できます。