「クラス」の編集履歴(バックアップ)一覧に戻る

クラス - (2016/03/23 (水) 14:28:05) のソース

*オブジェクト指向
C++はオブジェクト指向型プログラミング言語です。
従来の手続き型言語に比べ、プログラムの柔軟性やプログラミングの効率、データの安全性が高くなっています。&br()
オブジェクトとは物や概念を表し。
性質(状態)と動作(操作)を持ちます。&br()
例)
 車の性質 馬力 重量 乗車人数
 車の動作 加速する 減速する エンジンをかける エンジンを止める

*クラス
クラスは構造体の機能を拡張したもので、データ型として扱います。
クラスの中に定義された変数をメンバ変数と言います。
**クラスの定義
#html2(){{
<pre class="brush: cpp;">
class Person{
public:	// アクセス修飾子

	// メンバ変数
        string name;
        int age;
        float height;
        float weight;
};
</pre>
}}
// ここにアクセス修飾子についての説明
オブジェクトのメンバはアクセス修飾子によってアクセス制限をする事ができます。
アクセス修飾子には以下の種類があります。
|public | どこからでもアクセス可能|
|private | そのクラス内からのみアクセス可能|
|protected | そのクラスとその派生クラスからアクセス可能(後の章で説明)|

*メンバ関数
構造体ではメンバとして変数しか扱えませんが、クラスでは関数も扱うことができます。(メンバ関数)
メンバ関数は下のように定義、実装することができます。
**メンバ関数の定義と実装
ヘッダーファイルではクラスにメンバ関数を定義します。
ソースファイルではヘッダーファイルをインクルードし、メンバ関数の実装を記述します。
**Person.h
#html2(){{
<pre class="brush: cpp;">
class Person{
public:

        string name;
        int age;
        float height;
        float weight;

        // メンバ関数を定義
        void selfIntroduction();
};
</pre>
}}
**Person.cpp
#html2(){{
<pre class="brush: cpp;">
#include "Person.h"	// Person.hをインクルード

// メンバ関数の実装
void Person::selfIntroduction(){
	cout << "私の名前は" << name << "です。" << endl;
}
</pre>
}}
メンバ関数の実装を記述するにはスコープ解決演算子(&bold(){::})を用いてクラスを指定します。
**インライン関数
上記ではファイル分けをしてメンバ関数を実装しました。
ファイル分けをせずに定義と同時に実装を記述する方法もあります。
これをインライン関数と呼びます。
基本的には定義と実装は別にすべきです。
#html2(){{
<pre class="brush: cpp;">
class Person{
public:
	string name;
	int age;
	float height;
	float weight;

	void selfIntroduction(){
		cout << "私の名前は" << name << "です。" << endl;
	}
};
</pre>
}}

※以下の項目は数回後の講座で詳しく行います。
// ここにリンクを貼り付ける

*コンストラクタ
クラスにはオブジェクトを生成するための初期化行うコンストラクタというものがあります。
コンストラクタはクラスと同じ名前の関数で、
オブジェクトを生成するときに必ず実行されます。
ここに初期化処理を記述します。

コンストラクタの定義では
戻り値はありません。
引数は必要に応じて記述できます。
 class Person{
 public:
 	Person(String name);
 	...
 };

 Person::Person(String name){
 	this->name = name;
 }
コンストラクタが必要ない場合は何も書かなくてもデフォルトコンストラクタとして定義されています。
また、自分でコンストラクタを定義した場合は必ず実装も書かなければいけません。

*デストラクタ
デストラクタはオブジェクトを破棄するときに呼び出される関数です。
 ~クラス名()
のように定義します。
コンストラクタと同様に戻り値は無く、
さらに、引数をとることできません。
 class Person{
 public:
 	Person();
 	~Person();
       ...
 };

 Person::Person(){
 }
 Person::~Person(){
 }

クラス内に別のオブジェクトのポインタがあり
コンストラクタでnewし、
デストラクタでdeleteする
というような使い方をする。
 
//#include(highlight)

testcounter
合計 &counter(total)
今日 &counter(today)
昨日 &counter(yesterday)
//クラスの説明
//・クラスは構造体の拡張版。
//・データ型として扱う。
//・メンバ変数、メンバ関数を持つ。
//・クラスのメンバはアクセス修飾子でアクセス制限をかけることができる。
//
//メンバ関数
//・ヘッダーに定義、ソースに実装を書く。
//・実装の記述にはスコープ解決演算子を用いる。
//・ファイル分けをしない実装方法もある。(インライン関数)
//
//アクセス修飾子
//・クラスのメンバのアクセス制限を表す。
//・public	どこからでもアクセス可能
//・private	メンバ内からのみアクセス可能
//・protected	メンバ内、および派生クラスからアクセス可能
//
//コンストラクタ
//・オブジェクト生成の際に初期化を行う。(new)
//
//デストラクタ
//・オブジェクト破棄の際に呼び出される。(delete)
//
//オブジェクト
目安箱バナー