「オブジェクト」の編集履歴(バックアップ)一覧に戻る

オブジェクト - (2012/11/06 (火) 13:49:44) のソース

*クラスとオブジェクト
**オブジェクトの生成
クラスは型であり、それだけでは実態はありません。
実態を宣言するには以下のように記述します。
 クラス名 変数名;
この実態の事をオブジェクト、またはインスタンスと呼びます。&br()
1つのクラスに対し複数のオブジェクトを作ることが出来ます。
 Person tanaka, saito, suzuki;

*オブジェクトへのアクセス
オブジェクトのアクセスにはドット(.)を使います。
 オブジェクト.メンバ

 tanaka.age = 20;
 tanaka.selfIntroduction();

*ファイル分けでのクラス作成
では実際にプログラムを書いてみましょう。
基本はクラスごとにファイルを分け、ヘッダーで定義、ソースで実装を記述します。
ファイル名はクラス名と同じにするのが好ましいです。
**Person.h
#html2(){{
<pre class="brush: cpp;">
#include < string >

using namespace std;

class Person{
public:
	string name;
	int age;
	float height;
	float weight;

	void selfIntroduction();
};
</pre>
}}

**Person.cpp
#html2(){{
<pre class="brush: cpp;">
#include "Person.h"
#include < iostream >

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

**メインプログラム
#html2(){{
<pre class="brush: cpp;">
#include "Person.h"

int main(){
	Person taro;
	taro.name = "情報太郎";
	taro.selfIntroduction();

	return 0;
}
</pre>
}}

はじめのうちは覚えるためにファイルを自分で作り、何もない状態から記述してみましょう。
覚えてからはVisualStudioのクラスを追加する機能を使うと便利です。

*オブジェクトの配列
オブジェクトも配列として宣言することが可能です。
mainに以下のように配列型オブジェクトを宣言し、データを初期化してみましょう。

 Person family[3];
 club_member[0].Person("一郎",19,62,170);
 club_member[1].Person("次郎",16,55,168);
 club_member[2].Person("三郎",12,42,154);


次にfor文を使って、全員に自己紹介をしてもらいます。
 for(int i=0; i<3; i++){
     family[i].selfIntroduction();
 }

配列でオブジェクトを宣言すると、一定の動作させたりすることが簡単になります。



*問題
**問題1
上記のPersonクラスを使ったプログラムにおいて
自己紹介関数 selfIntroduction() の中身を
名前に加えて年齢・身長・体重も出力するようにせよ。

**問題2
上記のPersonクラスを使ったプログラムにおいて
3人分のPersonオブジェクトを作り、それぞれメンバ変数の代入とselfIntroduction()の実行をせよ。

**問題3
上記のPersonクラスにおいて問題2では逐一メンバ変数をmainで指定していた。
これをコンストラクタを使って1行で初期化できるようにせよ。

**問題4
新たに以下の性質と動作をもつ Bottle クラスを作成せよ。

メンバ変数
プライベートメンバ
  ボトルの容量 整数型 capacity
  入っている量 整数型 volume
メンバ関数
パブリックメンバ
  pourIn
  戻り値:無し
  引数 :整数型 volume
  指定された量水を入れ報告、あふれたら何ccあふれたか報告する。

  pourOut
  戻り値:無し
  引数 :整数型 volume
  指定された量水を出し報告 足りなかったら報告する。
コンストラクタ
  capacity
  引数 :整数型 capacity
  指定された容量のボトルを作り、水が入っていない状態で初期化。

#ref(http://www58.atwiki.jp/cschola/?cmd=upload&act=open&page=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88&file=bottle.png,title=class bottle)
#ref(http://www58.atwiki.jp/cschola/?cmd=upload&act=open&page=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88&file=bottle_img.png,title=bottle)

実行例)
 水を 100 cc入れます。
  今 100 cc入っています。
 水を 200 cc入れます。
  今 300 cc入っています。
 水を 300 cc入れます。
  水が 100 ccあふれました。
  今 500 cc入っています。
 水を 200 cc出します
  200 cc出しました
 水を 200 cc出します
  200 cc出しました
 水を 200 cc出します
  しかし水が足りません
  100 cc出しました

答え:[[Bottle]]

#include(highlight)
目安箱バナー