C++をJavaのように使う。

C++Javaのように使う。


C++は、コンピューターの低級な部分から扱える代わりに、複雑な言語だと思う。
おそらく、初心者が、一朝一夕でエラーなく書ける言語ではないようです。
自分の場合、C++でなくとも、他の言語で十分対応できるような作業しかしていませんが、
C++で書かれたライブラリの豊富さは魅力的に感じますし、Toy Program程度ですが、やはり利用したいと思うことがあります。


初心者ができるだけ簡単にC++のおいしいところだけ利用するには、どうしたらよいかということを考え、
とりあえずは、Javaみたいに書ければいいのでは、という考えに至りました。 (エキスパートには怒られそうですが。。)


Javaっぽく書く準備。
1. C++11 を使う。
g++で使う場合: http://d.hatena.ne.jp/t_ume_tky/20130404/1365084114
Qt で使う場合: https://sites.google.com/site/flowofcreations/Qt-memoranda/cpp0x-and-gcc-and-qmake
2. 取りあえず、ヘッダファイルを分けない。


1は初期化などが、C++11以前だと、複雑になってしまうため (複雑に見える)
2は、ヘッダを書こうとすると、初心者の自分のようなものは、面倒になってしまうからです。ToyProgramであれば、一つのファイルに書いてしまって問題ないはずです。


そうすると、以下のようにクラスが書けてしまいます。
Javaっぽいですよね。
しかも、public にしておくと、setter/getter も定義しなくてよい。



Javaっぽくクラスを書いてみた。
コピーコンストラクタや、デストラクタは、
クラスに、ポインタメンバを持たせる時に、必須になってくるので、C++では基本書かざるを得ないですよね。

#include <iostream>
#include <vector>

class MyClass{
public:
  int a = 11;
  int b[3] = {1,2,3};
  std::vector<int> c = {1,2,3,4,5};
  int d; // これもOK

   // constructor
  MyClass(void){
    std::cout << "  constructor \n" ;
  }

  // copy constructor 
  MyClass(const MyClass& obj){
    std::cout << "copy constructor \n" ;
  }

  // destructor
  ~MyClass(void){} 
};


int main(void){
  MyClass x = MyClass();  // コンストラクタ
  x.d = 100;  // publicメンバは、setter/getter 不要
  std::cout << x.a << x.d ;
  std::cout << "\n";

  MyClass y = x;  // コピーコンストラクタ ( でも、クラス定義内の =による初期化が有効。)
  std::cout << y.a << y.d ;  // dは未定義:エラー or 危険。
  std::cout << "\n";
}