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

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

継承

今日はクラスの継承です。継承の宣言から、継承したメソッド・フィールドのアクセス制御まで。

継承の宣言

以下の形式で書きます。

class <派生クラス名> : [<継承修飾子>] <親クラス名>  { ... }; 

簡単なサンプル。

#include <iostream>

// 親クラス
class Animal {
private : 
    char *name;
public : 
    char *getName();
    void setName( char *name );
};
char *Animal::getName() {
    return name;
}
void Animal::setName( char *name ) {
    this->name = name;
}

// 派生クラス
// class <派生クラス名> : [<継承修飾子>] <親クラス名>  { ... }; の形式で宣言する。
class Kitten : public Animal { 
    int age;
public : 
    int getAge(); 
    void setAge( int age );
    void meow () {
        std::cout << this->getName() << ":" << this->age << std::endl;
    }
};
int Kitten::getAge() {
    return age;
}
void Kitten::setAge( int age ) {
    this->age = age;
}

// メイン関数
int main() {

    Kitten kitten;
    kitten.setAge(1);
    kitten.setName("mii");
    kitten.meow();

    return 0;
}

実行結果です。

mii:1

継承したメソッド・フィールドのアクセス制御

Javaでは、親クラスのフィールドやメソッドで指定したアクセス修飾子(publicやprotectedなど)により、継承したメソッドなどのアクセス範囲が決まりますが、C++では継承時に指定する「継承修飾子」の影響も受けます。継承修飾子には、「public」と「private」があります。

  • private派生した場合、
    • 親クラスのすべてのメソッド、フィールドが外部から参照できなくなる。(publicもダメ)
    • 派生クラス自身からはprotected,publicなフィールド、メソッドは利用できる。
  • public派生した場合
  • 親クラスのprivateメンバーは派生クラスからもアクセスできない。(private派生、public派生とも。)Javaと同じですね。
  • デフォルトはprivate派生。(Javaになれた人は注意。)
private派生の場合
親のprivate 親のprotected 親のpublic 自身のprivate 自身のprotected 自身のpublic
派生クラス自身から ×
他のクラスから × × × × ×
public派生の場合
親のprivate 親のprotected 親のpublic 自身のprivate 自身のprotected 自身のpublic
派生クラス自身から ×
他のクラスから × × × ×

ややこい。