2012/06/16

C++ 学習開始

世の中のオープンソースのほとんどが C++(シープラスプラス)で書かれているので、それらを少し読もうとするだけでもC++の知識が必要。ということでCと並行してC++の基礎も学習することにした。

C++はCを拡張してオブジェクト指向プログラミングをできるようにした言語。拡張なのでCで記述したソースファイルは、基本的にC++でもコンパイルができる。オブジェクト指向プログラミングは大規模なプログラミングを多人数で開発するのに向いているため、現在では巨大なプログラムはC++で作られることが多い。 C++は1998年にISO/IEC C++ 1998として規格化された。最新はISO/IEC C++ 2011。

学習環境はCと全く同じで行うつもり。コンパイラはGCC(g++)を使って、エディタはMeadow。CUIの範囲で基本的なことだけを確認程度にやってみようと思う。Cと重複する部分も多々あるので、そういう部分はCのページに書いて、C++独自の部分のみ扱うつもり。クラス、多重継承、オーバーロード、仮想関数、テンプレート、例外処理等の基本的な学習になると思う。

Hello World!

#include <iostream>
int main() {
   std::cout << "Hello World! C++\n";
   return 0;
}
まずはwikiにあるHello Worldから。ソースファイルの拡張子は.cpp。コンパイルはg++を使う。Cでは「printf」を標準的に使うけど、C++ではコンソール入出力にはstdio.hではなくiostreamを使うようだ。「std::cout」(シーアウト)という見慣れない記述となる。これはオブジェクトらしい。「<<」はビットシフトではなく、出力ストリーム演算子。このiostreamを使う理由は、コンソール出力だけでなく、ファイル出力や、通信などでも同じように使える便利さがあるようだ。 もちろんCとの互換性もあるのでstdio.hをインクルードすればprintfも使える。下のコンソールイメージはコンパイルから実行まで。
c:\>g++ a.cpp

c:\>a.exe
Hello World! C++

c:\>


入出力

#include <iostream>
int main(void){
  int num;
  std::string str;
  std::cout << "名前: ";
  std::cin >> str;
  std::cout << "入力した整数を2倍にします: ";
  std::cin >> num;
  std::cout << "こんにちは " << str 
            << " さん\n入力した整数の2倍は" 
            << num*2 << "です。" << std::endl;
  return 0;
}
入出力はCに比べてお手軽だ。「cin」(シーイン)で取得した文字列は、数値変換することもなく、そのまま計算できてしまう。ただこういうのに慣れてしまうと、メモリや型を意識しなくなりそうだ。最後の「std::endl;」はマニピュレータで改行した上でバッファをフラッシュする。C++ではよく使われている。 また本質的なことではないが、ソースコードは、括弧が少なく、演算子の::や<<が多いので、随分サイバーの印象でかっこいい。
名前: ぴよ
入力した整数を2倍にします: 2012
こんにちは ぴよ さん
入力した整数の2倍は4024です。


名前空間の指定を省略

#include <iostream>
using namespace std;
int main(void){
  int num;
  string str;
  cout << "名前: ";
  cin >> str;
  cout << "入力した整数を2倍にします: ";
  cin >> num;
  cout << "こんにちは " << str 
       << " さん\n入力した整数の2倍は" 
       << num*2 << "です。" << endl;
  return 0;
}
名前空間の指定であるstd::が多いので、これらを省略してみる。mainの前で using namespace std; とすることで、std::を省略できる。
名前: ポチ
入力した整数を2倍にします: 50
こんにちは ポチ さん
入力した整数の2倍は100です。


C++言語 Meadow & MinGW GCC 目次