3-1-0. クラスとオブジェクト

公開日: 15:15 3. オブジェクト指向編/3-1. クラスとオブジェクト/3-1-0. クラスとオブジェクト

C++プログラミングの主な目的はC言語にオブジェクト指向を加える事であり、クラスはオブジェクト指向プログラミングをサポートする中心的な機能であり、ユーザ定義型と呼ばれることもあります。 

クラスはオブジェクトの形状を指定するのに使われ、データ表現とそのデータを操作するメソッドを組み合わせてきちんと1つのパッケージにまとめたものです。クラス内のデータと関数はクラスのメンバと呼ばれます。

C++クラス定義

クラスを定義するときは、データ型の設計図を定義します。これは実際にはどのデータも定義しませんが、クラス名が意味するもの、つまりクラスのオブジェクトがなにを成すのか、そのようなオブジェクトに実行できる命令は何なのかを定義します。

クラス定義はclassキーワードから始まり、後ろにクラス名が続きます。クラス本体は中括弧で囲まれます。クラス定義はセミコロンか宣言のリストのいづれかで終わりま す。 次の例は箱のデータ型をclassキーワードを使って定義しています。
class Box
{
   public:
      double length;   // 箱の縦幅
      double breadth;  // 箱の横幅
      double height;   // 箱の深さ
};
publicキーワードは、これに従うクラスのメンバーへのアクセス属性を決定します。publicなメンバはクラスオブジェクトのスコープ内であればクラス外のどこからでもアクセスされます。

C++のオブジェクトの定義

クラスはオブジェクトの設計図を供給するので、基本的にオブジェクトはクラスから作られます。クラスのオブジェクトの宣言は基本型の変数を同じように行われます。次の構文はBoxクラスの2つのオブジェクトを宣言します。
Box Box1;          // Box型のBox1を宣言
Box Box2;          // Box型のBox1を宣言

Box1とBox2はどちらも独自のデータメンバのコピーを持ちます。

データメンバへのアクセス

クラスオブジェクトのpublicなデータメンバは直接メンバ選択子(.)を使ってアクセスされます。次の例で確認してみましょう。
#include <iostream>

using namespace std;
class Box
{
   public:
      double length;   // 箱の縦幅
      double breadth;  // 箱の横幅
      double height;   // 箱の深さ
};

int main( )
{
   Box Box1;          // Box型のBox1を宣言
   Box Box2;          // Box型のBox1を宣言
   double volume = 0.0;     // 箱の体積を保存
 
   // box 1の仕様
   Box1.height = 5.0; 
   Box1.length = 6.0; 
   Box1.breadth = 7.0;

   // box 2の仕様
   Box2.height = 10.0;
   Box2.length = 12.0;
   Box2.breadth = 13.0;
   // box 1の体積
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Volume of Box1 : " << volume <<endl;

   // box 2の体積
   volume = Box2.height * Box2.length * Box2.breadth;
   cout << "Volume of Box2 : " << volume <<endl;
   return 0;
}

上のコードをコンパイルし実行すると、次の結果が得られます。
Volume of Box1 : 210
Volume of Box2 : 1560

直接メンバ選択子を使って直接privateとprotectedのメンバへアクセス出来ないことは重要です。privateとprotectedのメンバがどのようにアクセスされるかを学んでいきます。

クラスとオブジェクトの詳細

これまでのところ、C++のクラスとオブジェクトの基本的な考え方について学びました。C++のクラスとオブジェクトに関する興味深いコンセプトを見ていきます。

コンセプト説明
クラスメンバ関数クラスのメンバ関数は変数などのようにクラスの定義内でそのプロトタイプや定義をもつ関数です。
クラスアクセス指定子クラスメンバはpublic、private。protectedとして定義されます。デフォルトメンバーはprivateと想定されます。
コンストラクタとデストラクタクラスコンストラクタはクラスのオブジェクトが生成された時に呼ばれる、クラス内の特別な関数です。デストラクタは生成されたオブジェクトが破棄されるときに呼ばれる特別な関数です。
コピーコンストラクタコピーコンストラクタは前に作られた同じクラスのオブジェクトで生成したオブジェクトを初期化します。
フレンド関数フレンド関数はクラスのprivateとprotectedメンバへのフルアクセスが許可されます。
inline関数inline関数を使うと、コンパイラは関数を呼び出した場所へ関数本体のコードを展開しようとします。
thisポインタすべてのオブジェクトはオブジェクト自身を示すthisポインタを持ちます。
クラスへのポインタクラスへのポインタは構造体へのポインタと全く同じ方法で行われます。実際にクラスは関数を持ったただの構造体です。
静的メンバクラスのデータ、関数メンバはどちらもstaticとして宣言できます。
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿