クラスとオブジェクト

オブジェクトの生成

クラスは型であり、それだけでは実態はありません。
実態を宣言するには以下のように記述します。
クラス名 変数名;
この実態の事をオブジェクト、またはインスタンスと呼びます。

1つのクラスに対し複数のオブジェクトを作ることが出来ます。
Person tanaka, saito, suzuki;

オブジェクトへのアクセス

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

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

ポインタを使う場合

(今は読み飛ばし読み飛ばして、後で戻って見直すことをお勧めします。)
上記の方法だと、オブジェクトはスコープ { } 内でしか生存できません。
スコープが終了するとint型など普通の変数同様そこで破棄されます。

しかしそれでは都合が悪い場合が多く存在します。
そこでオブジェクトのポインタとnewを使いスコープが終了しても生存し続けるオブジェクトを作ることが出来ます。

オブジェクトの生成

ポインタの確保と定義を別々にする場合。
Person *tanaka;

tanaka = new Person();
一行で生成する場合
Person *tanaka = new Person();

オブジェクトの破棄

newしたオブジェクトは明示的に削除しない限りメモリに残り続けます。
必要のなくなったオブジェクトは必ずdeleteでを破棄しましょう。
delete tanaka;

オブジェクトへのアクセス

ポインタを使って定義されたオブジェクトは -> (アロー演算子)を使ってアクセスします。
tanaka->age = 20;
tanaka->selfIntroduction();


ファイル分けでのクラス作成

では実際にプログラムを書いてみましょう。
基本はクラスごとにファイルを分け、ヘッダーで定義、ソースで実装を記述します。
ファイル名はクラス名と同じにするのが好ましいです。

Person.h

#include < string >

using namespace std;

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

        void selfIntroduction();
};

Person.cpp

#include "Person.h"
#include < iostream >

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

メインプログラム

#include "Person.h"

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

        return 0;
}

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




問題

問題1

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

問題2

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

問題3

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

問題4

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

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

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


実行例)
水を 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