データサイエンティスト(仮)

元素粒子論博士。今はデータサイエンティスト(仮)。

久々にC++を触ってみたら自明なクラスしか書けない

動機

自明な言葉を発する営みを若干抽象化したい。
tekenuko.hatenablog.com

自明なクラス作成

抽象化 = オブジェクト化。
外部からの入力が自明かどうかを判定します。

// trivialclass.cpp

# include <iostream>
# include <string>

using namespace std;

// クラス
class trivial{
// 変数と関数
private:
  string str;
public:
  void judgetrivial(string str);
};

// 入力に対して自明かどうか判定する関数
void trivial::judgetrivial(string str){
  if(str == "Hello world!"){
    cout << "自明ですね" << endl;
  }
  else{
    cout << "Highly nontrivial!" << endl;
  }
}

int main(){

  trivial tv;
  string str;
  cout << "自明な言葉はなーんだ?" << endl; // 自明なクイズ
  getline(cin, str); // 外部入力
  tv.judgetrivial(str); // 関数を実行

  return 0;
}

自明な実行

trivialclassという実行ファイルを作って実行します。自明なクイズが始まるので、自明な入力をすると...

$ g++ -o trivialclass trivialclass.cpp 
$ ./trivialclass

# 出力
自明な言葉はなーんだ?  // 自明なクイズが始まる
Hello world! // コマンドラインで自明に入力する
自明ですね // 自明だったらしいです

非自明なことを言うと…

$ g++ -o trivialclass trivialclass.cpp 
$ ./trivialclass

# 出力
自明な言葉はなーんだ?  // 自明なクイズが始まる
ケーラー多様体 // コマンドラインで自明に入力する
Highly nontrivial! // 非自明だったらしいです

とりあえず自明に動きました。

所感

これだけだと関数を定義したのと大差ないですね。継承とか関数の抽象化したりするともう少し感覚が戻ってくるのかもしれません。