「オブジェクト」の編集履歴(バックアップ)一覧に戻る
オブジェクト - (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)