C++

クラスの定義宣言の違い -> Here


関数の作り方「関数名」「引数」「戻り値」を最初に考える.「引数」「戻り値」はデータ型を指定. 戻り値を返さない場合はvoid

double getBmi(double height, double weight)2)


行の末尾にセミコロン(;)がある部分は,それが「~せよ」という命令であることを意味しています2)

セミコロンがない部分は,プログラムの枠組みや設定を意味しています2)

C++では,main関数がプログラムの実行開始位置となります2)

cin,cout:オブジェクト(BTW, クラスはオブジェクトの内容を定義したもの)


モジュール化:部品(モジュール)に分けること

関数:1つの機能を持つ小さなモジュール

クラス:複数の機能を持つ大きなモジュール


コンテナ


コンパイル

リンク


const 変数の値を固定


editor

  • visual studio code–settings pretty complicated für mich
  • emacs–M=option key in Windows and command key in Mac (how2use)

emacs command

C-x 2
Split the selected window into two windows, one above the other (split-window vertically).
C-x 3
Split the selected window into two windows positioned side by side (split-window-horizontally).
C-Mouse-2
In the mode line or scroll bar of a window, split that window

Object Oriented Programminghttp://playet.jugem.jp/?eid=151

cplusplus.com

What are classes?

  • Inheritance
// my first program in C++
#include <iostream>

int main()
{
  std::cout << "Hello World!";
}

First Program

Hello World!

Tutorial pdf <-English version

 Eigen

Referenced movie 1

<iostream>:header file

→ Standard Input/Output Library

cin:

cout: standard output stream

cerr

clog

push_back


g++ gcc differences


【参考文献】
1)新・明解C++で学ぶオブジェクト指向プログラミング

sample programs here

2)スラスラわかるC++第2版


Here is easy to use emacs and makefile.

Here is easy to understand C++.


Main Contents

  • namespace:自作コードは名前空間で包め
  • CLASS(Inheritance,encapsulation,polymorphism:structに関数が定義できるようになったもの,自身に対して関数を定義して、自身の変数を参照したりできます)
  • overload
  • template:関数テンプレート,クラステンプレート(template<>:明示的特殊化)
  • Object Oriented:オブジェクト指向
  • Exception Handling
  • Constructor and Destructor
  • struct:構造体(C++では,構造体でも関数を定義できる(ただし,アクセシビリティはpublic):データ構造の定義.)<-先頭にアクセス指定子(publicとprivate)がなければ,メンバの属性は,非公開ではなく公開となりますので,注意しましょう.
  • class vs struct
  • virtual(仮想関数指定子:純粋仮想関数) 実装がなく,プロトタイプが宣言されているだけの関数です.では意味は?->ANS:このクラスでは使わない.派生クラスで使う.
  • static:グローバル変数として扱うため?

Visual Studio Code Settings (vscode) using MSYS2 <- Can be complicated

How2Set here

Compile + Link = Make a exe file

demangle

nm –demangle foo.o

C++では引数の型が異なれば同名の関数を定義することができるので、名前の衝突を避けるために引数の型情報なども含むようコンパイラが名前を変更する。これを名前マングル(マングリング)という。マングルされた名前を元に戻すことはデマングルという。

this->

「このクラスのインスタンスの」..メンバ変数であることを明示する意味がある

現実世界のオブジェクト(物や生き物)をプログラムに表した(定義した)ものがクラスであり,それを実際にメモリ上で動作する実体としたものがインスタンスです.インスタンスは,コンピュータの中で,現実世界のオブジェクトを表しているといえます.そのため,インスタンスのことをオブジェクトととも呼ぶのです(スラスラわかるC++第2版).


コンストラクタ:オブジェクトを確実かつ適切に初期化 <- クラス型オブジェクトの生成時に呼び出される.

コンストラクタ内では,非公開のデータメンバに自由にアクセスできます.

クラス型を作る時は,コンストラクタを用意して,オブジェクトを確実かつ適切に初期化する手段を提供しよう.

コンストラクタは,オブジェクト生成時に呼び出される特殊なメンバ関数

デストラクタ


メンバ関数:概念的には,個々のオブジェクトごとに作られて,そのオブジェクトに所属する.(ただし,概念上の表現.コンパイルの結果作られる内部的なコードは1個.

クラスの外部から直接アクセスできない非公開のデータメンバも,メンバ関数を通じて間接的にアクセスできます.

同じクラスに所属するデータメンバとメンバ関数とが同一の名前をもつことは許されない.


浮動小数点の計算よりも、整数の計算の方が一般的に高速です。 整数で計算できるところは可能な限り整数で計算する様にしましょう。


reference

pointer

A class is an expanded concept of a data structure.

class = member variables + member functions (including constructor)

データ隠蔽を実現してプログラムの品質を向上させるために,クラス内のデータメンバは,原則として非公開(private)にすべきである1)

先頭にアクセス指定子がなければ非公開(protected 限定公開)

reading/writing a text file ref

how to compile and execute in Terminal on Mac OS X and mingw(start .), etc

g++ -o nopen nopen.cpp

./nopen

ofstream

hello.cpp

#include <iostream>
using namespace std;

int main ()
{
  cout << "Hello World! ";
  cout << "I'm Yamamoto Lab.";
}

g++ hello.cpp -o hello

./hello

calc.cpp

#include <iostream>
using namespace std;

int main ()
{
  int a=5;            
  int b(4);    
  int c(3);   
  int ans;

  a = a + b;
  ans = a - c;
  cout << ans;

  return 0;
}

g++ calc.cpp -o calc


multi thread tutorial


for (auto data : point) <- 配列pointからデータを順番に取り出して,変数dataに格納することを繰り返せ.その際に変数dataのデータ型は推測して自動的(auto)に決めよ」


メモリ memory

C++ Row-major order方式

メモリ上のデータにアクセスする場合はシーケンシャルにアクセスしたほうが処理時間が短くなります。その理由は以下の2つです。

  • メモリ(DRAM)上のデータの読み出しはランダムアクセスよりシーケンシャルアクセスの方が速い1
  • 連続したデータの方がCPUのキャッシュやSIMD2などの処理高速化の仕組みの恩恵を受けやすい。

【参考】Qiita


C++ on Mac OS

using framework is good.

Where is framework ?

It is saved in /Library/Frameworks.