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"; }