研究室の新人教育用です。
大部分を某先輩の資料から流用していますが、より噛み砕いた説明を少しだけ追加しています。
参考文献は ここ に載せておきます。
VScode の Dev Containers を用います。
C言語にオブジェクト指向を導入したものが、C++ である。どちらも静的型付け言語であるため、変数の定義の際には型を明示する必要がある(Python は動的型付け言語)。
// C++
int a; // a を整数型と宣言
a = 10;
a = 'hello'; // 整数型でないため代入できずエラーとなる
# Python
a = 10 # a の型は int
a = "hello" # a の型は string に変更される
よく用いられる型としては、以下のようなものがある。変数の型を宣言することは、データを格納するメモリ容量をあらかじめ確保することを意味する。
int
: 整数double
: 浮動小数点char
: 文字bool
: ブール
C++ はコンパイル言語である。コンパイルとは、人間が読み書きしやすいプログラミング言語を、機械語へと翻訳すること。
コンパイラの代表的なものとして、g++
や clang++
が挙げられるが、ここでは g++
を用いる。
プログラムの実行までの流れは以下の通り。
# ソースコードをコンパイル
$ g++ hello.cpp
# 生成された実行バイナリ(ネイティブコード)を実行
$ ./a.out
# デフォルトでは実行バイナリのファイル名は a.out だが、
# コンパイル時に指定することも可能
$ g++ hello.cpp -o hello
また、別ファイルで定義されている関数を必要に応じて参照して、単一の実行バイナリにまとめるものを、リンカという。
std::cout
とかの std
も名前空間の一つ。名前空間とは、オブジェクト(関数やクラス、変数など)の所属するグループのこと。同名のオブジェクトによる名前衝突を避ける目的がある。
using namespace std
とすることで、名前空間の指定を省略することも可能である。
データがメモリのどの場所に置かれているかを表すものがアドレスである。C++ ではアドレス演算子 &
により、変数の記憶されているアドレスを取得することができる。
ポインタは、変数のアドレスを指す変数のことであり、
int *p;
のように定義される。
上記の例では、 int
型の変数のアドレスを指す変数が p
ということになる。
次のような形で、ポインタにアドレスを代入することが可能であり、型が同一であることがわかる。
int a;
int *p = &a;
代表的なデバッガである gdb (Gnu Debagger) を使う。
コンパイル時に -g
オプションをつけることで、デバッグに必要な情報を含んだ実行バイナリが生成される(ただし、データサイズが少し大きくなる)。
あとは、実行バイナリを引数に gdb
を実行するだけ。
$ g++ -g fizzbuzz.cpp -o fizzbuzz
$ gdb fizzbuzz
gdb に入ってからは、プログラムのチェックしたい箇所にブレークポイントを置き、適宜変数の中身を見たり、エラーが発生する箇所を精査したりすることができる。
-
https://github.com/kaityo256/python2cpp
物理情報工学科の渡辺先生の GitHub リポジトリ. Python の経験がある人に向けて C++ についてかなり分かりやすく書かれている. 他にも有用なリポジトリが多々ある.
Twitter をみると子煩悩なお父さん.
-
https://atcoder.jp/contests/apg4b/
競技プログラミングコンテストを運営する AtCoder が提供している初心者向けプログラミング教材. C 言語特有の話を切り分けて書いてくれているので,プログラミングの入門資料としてもちょうど良い. 途中から計算量等,競プロ寄りの知識も出てくるが,この辺りもかなり重要な知識なので一通り目を通してもよさそう.
-
https://rinatz.github.io/cpp-book/
どこの誰が書いたのか良く分からないが分かりやすい.
-
C++ 界隈では有名な人 が書いた C++ の資料. C++ の規格について厳密に解説してくれているのでものすごく参考になる.
-
Open CV の公式サイト