改訂[前編]:OpenFOAM学習者向け C++プログラミング超入門

投稿日時: 2019/01/04 S Nakagawa

OpenFOAM 学習者向けのC++プログラミング基礎 学習資料を作成しました。興味ある方は、ご覧ください。コンパイルして、試してください。

codes.zip

ご意見、ご感想、質問など、大歓迎です。Googleグループへの投稿などでご連絡ください。例題が陳腐です。良いアイデアがあれば、ぜひ、教えて下さい。


目的

 クラス の基本について学ぶ。
 テンプレート クラス の基本について学ぶ。

クラス,コンストラクタ,テンプレートは,これでよい。

継承は?
・namedExtendTypeとかいうクラスを作る
・extendTypeクラスに名前も付けるもの

オペレータ(演算子)のオーバーロード

基本方針

プログラムの main はできるだけシンプルにする。クラスを活用する。

サンプル

Code01

ごく基本的なプログラム例を CODE 1 に示す。キーボードから整数を入力し,その値の2倍を画面に表示する。

c++
#include <iostream>

intmain()
{
    intn;
    std::cout<<"整数を入力してください。"<<std::endl;
    std::cin>>n;
    std::cout<<"整数 "<<n<<" の2倍は "<<n+n<<" です。"<<std::endl; 

     return0;
}                        

Code02

整数の値を2倍にする計算を関数とする。

c++
#include <iostream>

// function
intmakeDouble(constint&n)
{
   returnn+n;
};

intmain()
{
    intn;
    std::cout<<"整数を入力してください。"<<std::endl;
    std::cin>>n;
    std::cout<<"整数 "<<n<<" の2倍は "<<makeDouble(n)<<" です。"<<std::endl; 

     return0;
}                        

Code03

整数 (int) 型を発展させて,その値を2倍にする機能のある 新しい整数型 を作り出すとする。この機能をクラスとして実装する。クラス名を extendedInt とする。

まずは,クラスというものを作成し,先ほどの関数をクラスのメソッドとして実装する。

c++
#include <iostream>
    
// クラスの定義 スタート
classextendedInt
{
    public:
    
        intmakeDouble(constint&n)
        {
            returnn+n;
        };
};
// クラスの定義 ここまで
    
intmain()
{
    intn;
    extendedIntextInt;

    std::cout<<"整数を入力してください。"<<std::endl;
    std::cin>>n;
    std::cout<<"整数 "<<n<<" の2倍は "<<extInt.makeDouble(n)<<" です。"<<std::endl; 

    return0;
}                        

はじめてクラスを作ることだけを考えた例である。実際には,クラスの中には値を持つのが普通である。

Code04

先のコードで実行していた作業のほとんどはクラスで実行することにする。

c++
#include <iostream>
    
// クラスの定義 スタート
classextendedInt
{
    intn_;
    
    public:
    
        intmakeDouble()
        {
            returnn_+n_;
        };

        booldisplayDouble()
        {
            std::cout<<"整数 "<<n_<<" の2倍は "<<makeDouble()<<" です。"<<std::endl;
            std::cout<<std::endl;
        }

        boolread()
        {
            std::cout<<" 整数を入力してください。"<<std::endl;
            std::cin>>n_;
            std::cout<<std::endl;
        };
};
// クラスの定義 ここまで
    
intmain()
{
    extendedIntextInt;

    extInt.read(); 
    extInt.displayDouble();

    return0;
}                        

 クラスに整数を受け取るコンストラクタを作成する。
 画面表示部分もクラスに任せることにする。

Code05

主プログラムでは,extendedIntクラスの実体としてextIntインスタンスを作成している。この生成時に,主プログラムから値を与えることができる。

このためには,クラスの中にコンストラクタと呼ばれる特別なメソッドを作成する。コンストラクタは,インスタンスを生成した時だけに実行される。コンストラクタはクラス名と同じ名前のメソッドである。

c++
#include <iostream>

classextendedInt
{
    intn_;

public:

    // constructor
    extendedInt(constint&n)
    {
        n_=n;
    };

    intmakeDouble()
    {
        returnn_+n_;
    };

    booldisplayDouble()
    {
        std::cout<<"整数 "<<n_<<" の2倍は "<<makeDouble()<<" です。"<<std::endl;
        std::cout<<std::endl;
    }
};

intmain()
{
    intn;

    std::cout<<"整数を入力してください。"<<std::endl;
    std::cin>>n;

    extendedIntextInt(n); 
    extInt.displayDouble();

    return0;
}