Giter VIP home page Giter VIP logo

cpp_educ's Introduction

cpp_educ

研究室の新人教育用です。

大部分を某先輩の資料から流用していますが、より噛み砕いた説明を少しだけ追加しています。

参考文献は ここ に載せておきます。

環境構築

VScode の Dev Containers を用います。

Dev Containers での開発環境構築について

C++の概要

C言語とC++

C言語にオブジェクト指向を導入したものが、C++ である。どちらも静的型付け言語であるため、変数の定義の際には型を明示する必要がある(Python は動的型付け言語)。

// C++
int a;        // a を整数型と宣言
a = 10;
a = 'hello';  // 整数型でないため代入できずエラーとなる
# Python
a = 10        # a の型は int 
a = "hello"   # a の型は string に変更される

型について

よく用いられる型としては、以下のようなものがある。変数の型を宣言することは、データを格納するメモリ容量をあらかじめ確保することを意味する。

  • int: 整数
  • double: 浮動小数点
  • char: 文字
  • bool: ブール

img

コンパイルとリンク

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 に入ってからは、プログラムのチェックしたい箇所にブレークポイントを置き、適宜変数の中身を見たり、エラーが発生する箇所を精査したりすることができる。

gdb のコマンド一覧

Reference

  1. https://github.com/kaityo256/python2cpp

    物理情報工学科の渡辺先生の GitHub リポジトリ. Python の経験がある人に向けて C++ についてかなり分かりやすく書かれている. 他にも有用なリポジトリが多々ある.

    Twitter をみると子煩悩なお父さん.

  2. https://atcoder.jp/contests/apg4b/

    競技プログラミングコンテストを運営する AtCoder が提供している初心者向けプログラミング教材. C 言語特有の話を切り分けて書いてくれているので,プログラミングの入門資料としてもちょうど良い. 途中から計算量等,競プロ寄りの知識も出てくるが,この辺りもかなり重要な知識なので一通り目を通してもよさそう.

  3. https://rinatz.github.io/cpp-book/

    どこの誰が書いたのか良く分からないが分かりやすい.

  4. https://cpp.rainy.me

    C++ 界隈では有名な人 が書いた C++ の資料. C++ の規格について厳密に解説してくれているのでものすごく参考になる.

  5. https://opencv.org/

    Open CV の公式サイト

cpp_educ's People

Contributors

chikaoooka avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.