BACK

HOOPSII MOBILE

HOME

第2回 オブジェクト指向の復習

C++はオブジェクト指向プログラミング言語ですから、クラスから先にやるべきかなと。
制御文とかそういう種類はあんまり他の言語とも変わらないはずですし。
後、最初にC++を見たときにクラスの宣言とか定義とかわかりにくかった記憶がある。

目次

[1] とにかくクラスを書いてみよう。

Java言語入門(ほぷしぃ)で使ったのと同じようなクラスを作ってみることにしました。
そうすることで他言語との比較もできて便利かと。

#include <iostream>
#include <string>
using namespace std;
// クラス定義 class クラス名
class Human {

private:
    // string型はc++の標準ではないので stringヘッダをincludeする。
    string name;
    int age;

public:
    // コンストラクタ(クラス名と同じ)
    // クラスをインスタンス化したときに呼ばれるもの
    Human(string tmp_name, int tmp_age);

    // デストラクタ(クラス名の先頭に~をつける)
    // インスタンスを廃棄するときによばれるもの
    ~Human();

    // メソッド 戻り値 関数名(引数)
    void introduce();
};

[2] 続いて、メソッドの詳細を作ろう。

上記のソースコードはクラスの定義をしただけなので、実際に行う処理を記載します。
上記のソースコードの続きから記載します。

// コンストラクタ
Human::Human(string tmp_name, int tmp_age){
    name = tmp_name;
    age = tmp_age;
}
// デストラクタ
Human::~Human(){
    
}
// メソッド
// 戻り値 クラス名::メソッド名(引数...)
void Human::introduce(){
    cout << "name is " << name << " age is " << age << endl;
}

Javaのように[this.name = name]という風に書いたらエラーになった。
C++は引数と変数で同じ変数名を使えないのかな。

[3] 最後に、クラスを呼び出してみよう。

定義したクラスを実際に使ってみました。

int main() {
    Human *human;
    // インスタンス化
    human = new Human("hopsii",10);
    // メソッドの実行
    human->introduce();

    // メンバ変数にアクセスするときは、human->name という感じに書く。
    return 0;
}

プログラムの準備ができましたら、実行します。

user_name@c_study:~/workspace $ g++ hello-cpp-world.cc -o helloCpp
user_name@c_study:~/workspace $ ./helloCpp
name is hopsii age is 10
user_name@c_study:~/workspace $

無事に動かすところまで確認することができました。
Cloud9 IDEで出力する文字列に日本語を入れたら正しく表示できなかった。
んー、なんかいい方法はないだろうか。

[4] 更新履歴

日付 詳細
2014/10/09 新規作成

Copyright (C) 2011 ほぷしぃ. All Rights Reserved.