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

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

2項演算子のオーバーロード

C++では"+"や"-"といった演算子オーバーロードが可能です。これを使うと以下のようなオブジェクト同士の足し算や引き算の動作を規定することができます。

Kitten *mii = new Kitten();
Kitten *tora = new Kitten();
*mii + tora; // オブジェクト同士を足す。

ためしに、2項演算子オーバーロードしてみます。

#include <iostream>

// クラス定義
class Kitten {
    int age;
public :
    Kitten( int age ); 
    int getAge();
    
    // 2項演算子のオーバーロード
    Kitten* operator+( Kitten *k );
    Kitten* operator+( int i ); // 引数がintのもの。// 引数が違うためオーバーロードできる。
    int operator-( int i ); // 戻り値もKittenである必要はない。
    void operator-( );  // 引数、戻り値なしもOK
    // int operator-( int i, int j ); // 引数2つはエラー。
};

Kitten::Kitten( int age ) {
    this->age = age;
}
int Kitten::getAge() {
    return this->age;
}
Kitten *Kitten::operator+( Kitten *k ) {
    this->age += k->getAge();
    return this;
}
Kitten *Kitten::operator+( int i ) {
    this->age += i;
    return this;
}
int Kitten::operator-( int i ) {
    this->age -= i;
    return this->age;
}
void Kitten::operator-( ) {
    this->age -= 1;
}


// メイン関数
int main() {
    
    Kitten* mii = new Kitten( 1 );
    Kitten* tora = new Kitten( 2 );
    
    Kitten* shiro = *mii + tora;
    std::cout << shiro->getAge() << std::endl;  // 3

    shiro = *mii + 10;
    std::cout << shiro->getAge() << std::endl;  // 13
    
    std::cout << (*mii) - 5 << std::endl;  // 8
    
    -(*mii) ;
    std::cout << mii->getAge()<< std::endl;     // 7
    
    delete mii;
    delete tora;
    
    return 0;
}

実行結果です。

3
13
8
7