2018-12-01から1ヶ月間の記事一覧

EC++ #50, #51, #52 プレースメント new/delete

Effective C++ の 50, 51, 52項の内容です.本的には第8章をまるごと new/delete の話にさいていましたが,これを機会にちょっと new/delete の定義を見てみることにしました. new/delete とは? 下記,自分の環境にあった new/delete の宣言です. void* o…

#10 代入演算子は *this の参照を戻す

ということで,Effective C++の10項の内容です. コンストラクタ,コピーコンストラクタの暗黙呼び出し ということで,ちょっと内容とずれてしまうのですが寄り道です.そもそも,コンストラクタとかコピーコンストラクタってコンパイラが暗黙の呼び出しを…

#6 コンパイラが自動生成する関数を使用禁止する方法

ということで,Effective C++6項のお話です. コンパイラが自動で生成する関数 クラスを自作した時,明示的に自作関数を書かなければ下記の関数はコンパイラが自動生成するのでした. 1.コンストラクタ (Hoge()) 2.デストラクタ (~Hoge()) 3.コピ…

確率分布からの乱数の生成2 分布に従う乱数の発生,Box Muller法

ということで前回のエントリでは,下記の条件が既知の場合に変換後変数の確率密度分布を求める方法を考えました. 1.変換前の確率変数Xの確率密度関数がわかっている. 2.確率変数Xと確率変数Yの変換式Y=Φ(X) で,結果的に変換後の確率変数が従う分布 g(…

確率分布からの乱数の生成1 確率変数の変換

ということで,下記のエントリのGMappingの解剖実験進めているんですが,Motion Model の計算のところで正規分布に従う変数を生成する必要があったので簡単にまとめておくことにしました. 確率分布と分布に従う乱数の生成 平均値μ,分散σの正規分布が下記の…

#12 クラスのコピーの仕方3 STLコンテナを使うとき

Effective C++ 12項の内容+αの内容になりますが,STLのコンテナを使うときにコピーコンストラクタ・コピー代入演算子がどのように働くかを見てみます.下記のサンプルコードを作ってみました. #include <iostream> #include <memory> #include <cstring> #include <vector> class MyContainer </vector></cstring></memory></iostream>…

#12 クラスのコピーの仕方2 ディープコピー

ということで,Effective C++ 12項の内容の続きですが,ここでは自作コンテナを Deep Copy する例を取り上げます. ディープコピーのイメージ ディープコピーのイメージディープコピーした場合は,コピー元のオブジェクトとコピー先のオブジェクトになんの関…

#12 クラスのコピーの仕方1 シャローコピー

ということで,Effective C++の12項の内容なんですが,この辺自分もきちんと理解しきれてなかったのでまとめてみました. コピーの種類 オブジェクトをデザインするときに,コピーの振る舞いとか定義をどうするかを決めないといけないと思うんですが,大まか…

#35 仮想関数の代わりになるものを考える

Effective C++ #35 の内容です.この項はちょっと一風変わっていて,継承と仮想関数の仕組みを用いたシンプルなポリモーフィズムの実装を,異なるデザインパターンでおきかえる話でした.登場したデザインパターンとしては, 1.非仮想のインターフェースを…

SLAMのお勉強②−2 ~GMapping の環境設定

ということで,実際に ROS GMapping の解剖実験をするにあたって,環境を整えます.ROSのモジュールとして「ROSラッパー」「アルゴコア」の両方がきちんと管理されているので,そのまま catkin のパッケージとして落としてくれば,あとは catkin_make でビル…

SLAMのお勉強②−1 ~GMapping vs Google Cartographer

下記のエントリでSLAMの勉強をしているという話をしましたが,論文&本読みだけだとなかなか具体的なイメージが湧いてこないので,ソースコードも引っ張ってきて勉強することにしました.で,題材には下記の2つを使おうと思います.daily-tech.hatenablog.c…

#3(の2)可能ならいつでも const を使う.

Effective C++ 3項の内容です. const なメンバ関数とは?? 前回のエントリで変数に対する const の説明をしました.今回は,関数に対して使う const の説明です.クラスのメンバ関数に対して const をつけることによって,そのメソッドが当該オブジェクト…

#3(の1)可能ならいつでも const を使う.

Effective C++ 3項の内容です. const の使い方一覧 constがとても大事なことは,Effective C++も言っているし,とても良くわかるんですが,constの位置によってconstの対象が変わるのがなかなか覚えられません...一通りリストアップします. "const" for…

#24(の2) すべての引数に型変換が必要なら,非メンバ関数を定義する.

ということで前回エントリの続きです. 演算子の定義 前回整数値からRationalへの暗黙の型変換をするには,コンストラクタが使われていることを実験しました.今回はもう一歩進んで,掛け算の演算子オペレータを定義したいと思います.早速サンプルコードで…

#24(の1) すべての引数に型変換が必要なら,非メンバ関数を定義する.

ということで,Effective C++24項の内容です. コンストラクタと暗黙の型変換 Effective CPPでは,有理数の例を用いて暗黙の型変換が好まれる例を説明していました.他に簡単&適切な例が思いつかないので,ここでも有理数の例を用いて実験したいと思います…

#45 すべての互換型を受け取るために,メンバ関数テンプレートを使う

Effective C++ 45項の内容です. テンプレートで互換型を受け取るには? 「スマートポインタ(=リソース管理オブジェクト)を使えばリソースの破棄等を適切な範囲でやってくれるから,生のポインタを使わずにスマートポインタを使おう!」というのが #13 の…

#43 テンプレート化された基底クラスの名前へのアクセス方法

Effective C++ 43項の内容です. テンプレート化された基底クラスの名前は,派生クラスからは見えない. ということで,サンプルコードを見ていきます.まず,下記のような基底クラスと派生クラスがあったとします. class ElementA { public: void sayType(…

#33 継承した名前を隠蔽しない

Effective C++ 33項の内容です. 基底クラスにある名前は,派生クラスに同じ名前があると隠蔽される. 基底クラスにある名前は,派生クラスで同じ名前が使われるとアクセスできなくなります.下記,サンプルコードです. #include <iostream> class Base { public: cla</iostream>…

#42 typenameの2つの意味を理解する.

Effective C++ 42項の内容です. typenameの2つの用法 この項で述べられているtypenameの2つの意味ですが,下記です. 1. テンプレートパラメータの宣言として使う. 2. 「C++では,テンプレートパラメータ内部にあるネストされた依存型名はそのままでは型名…