無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

継承 その2

継承のつづき。メソッドコンストラクタのオーバーライドについて。

メソッドのオーバーライド

普通にできます。特に書くことなし。オーバーライドした親クラスのメソッドを呼び出すには「<親クラス名>::」をつけます。Javaの「super.」のようもの。

#include <iostream>

// 親クラス
class Animal {
protected : // protected またはpublicとすること。 
    void run();
};
void Animal::run() {
    std::cout << "animal run." << std::endl;
}

// 派生クラス
class Kitten : public Animal { 
public : // オーバーライドする場合もプロトタイプ宣言は必要。
    void run();
};

// オーバーライドされた関数
void Kitten::run() {
    // 親クラスのメソッド呼び出し
    //  「親クラス名::」をつける。
    Animal::run(); 
    std::cout << "kitten run." << std::endl;
}

// メイン関数
int main() {
    Kitten kitten;
    kitten.run();
    return 0;
}

実行結果です。

animal run.
kitten run.

親クラスのコンストラクタの呼び出し

Javaと同じく、派生クラスの生成時には親クラスのコンストラクタを実行する必要があります。

#include <iostream>

// 親クラス
class Animal {
public : 
   Animal( );
   Animal( char* name );
};
// 親クラスのコンストラクタ。引数を持つ
Animal::Animal(char* name) {
    std::cout << "animal " << name << " created." << std::endl;
}
// 親クラスのデフォルトコンストラクタ
Animal::Animal() {
    std::cout << "animal created." << std::endl;
}

// 派生クラス
class Kitten : public Animal { 
public :
    Kitten( );
    Kitten( char* name );
};
// 派生クラスのコンストラクタ 
Kitten::Kitten( char* name ) : Animal( name )  { // 親クラスの引数つきコンストラクタを実行する設定    
    std::cout << "kitten " << name << " created." << std::endl;
}
// 派生クラスのデフォルトコンストラクタ
Kitten::Kitten() {
    std::cout << "kitten created." << std::endl;
}

// メイン関数
int main() {
    Kitten kitten;
    Kitten kitten2( "mii" );
    return 0;
}

実行結果です。

animal created.
kitten created.
animal mii created.
kitten mii created.