C++

動的初期化

C++

定数式以外で行われる初期化のことを動的初期化と呼ぶ。動的初期化を行うと、const修飾された静的オブジェクトのような、確実にROMに配置したいオブジェクトが、RAMにとられることがある。 組込現場のC++プログラミング:p41

FreeTypeのベースラインあわせでかなりハマッタのでメモ

描画したいy座標 - bitmap_top チュートリアルのどこかに書いてあったんかなぁ。 英語力がたりん・・・。 [追記] ここにかいてありました。6のbの最後あたりのパラグラフ。 Once you have a bitmapped glyph image, you can access it directly through glyp…

組み合わせ(Combination)の数え上げのコードを書いてみた

あらいさんに書かんと沈めるでいわれたので書いてみた。 アルゴリズムを場当たりで考えて書いてたんですっげー時間かかった。 計5時間。 これを参考にしてからは1時間。 nCr(n個からr個取り出す組合せ)は、 1. リストの先頭要素を除いた残りのリストからr-…

非仮想protectedデストラクタについて

C++

基底クラスに非仮想protectedデストラクタを適用すると、仮想関数テーブル使用しない分パフォーマンスの向上が望めるようだ。 ただし、基底クラスからdeleteできないという制約も存在する。これはコンパイル時にその結果がわかるということで、メリットにも…

C#のマーシャリングってやつがよくわからん

あと、Socket使って動的なデータやり取りする場合は、データサイズ送った後にデータの実体送る必要があるってことか。//---------------------------------------- というか、送信できてなかったと思っていたのは、単純にエンディアンが違うだけだったからっ…

ファンクタがよくわからぬ

C++

なんか、コールバックのうまい実装方法ないかなーと思って探してたら、 ファンクタ利用するといいよ!ってどこかに書いてあった(気がした)。正直ファンクタをあんまりわかってない自分がいるわけですが、 ファンクタってoperator()オーバーロードしただけの…

ゆの in language

C++

ってのをさっき知った。 プログラムのハック遊び。 X / _ / X といったアスキーアートを含む一文を演算子オーバーロードなどを用いて実行可能なプログラムとして解釈させひだまりスケッチ×365 来週も見てくださいね!とコンソールに出力させる。(ただし、前提…

コンストラクタからの仮想関数呼び出しはNG

C++

○コンストラクタから仮想関数を呼び出す仮想関数がオーバーライドされているときに、スーパークラスのポインタから、その関数を呼び出せば、多態性によって、 サブクラス側の関数が呼び出されます。しかし、コンストラクタ内から仮想関数を呼び出す場合には…

参照と*constは同じようなもんだと教えてしまった!

C++

いかん!間違った! 参照は参照先変更できるじゃん!参照は初期化時に何かで初期化してやらないといけないだけで、別に参照先を変更できないわけじゃない。 参照先は変更できませんね、はい。 すいません、間違えました><ちょっと明日、またフォロー入れと…

最近読書会とは別に勉強会をはじめました

新人研修的な感じですね。いまさらか!と言う部分もありますが。 とりあえず、まずは何がわからないかをちゃんと知るために、C++の要素を適当にリストアップしてそれで確認を取ってみる。 ということでC++の要素をリストアップ!簡単なものは省いてる。あと…

構造体とかのアライメント

C++

処理系によりけりだと思われるが、基本的には「配列にしたときにバイト境界をまたがないように最小限のパディングが入れられる。」という法則に従うらしい。 実際にどんな状況の時にパディングが入るのか調べてみたらこんな記事があった。 配列にしたときに…

代入演算子による初期化について

C++

例えばHogeクラスがあるとき、 Hoge hoge1; Hoge hoge2 = hoge1; としたとき、呼ばれるのって代入演算子ではなくて、コピーコンストラクタなんですね。 これは見逃してた・・・。100へぇ。

講義形式でも結構自分も勉強になりますね

今日は初期化と代入の違いについてやったんですが、なかなか説明が難しかった。 と、いうのも話してると、これわかる?って確認して、わき道にそれちゃうと自分の脳の中で話を戻すのが大変><あと、今日自分も勉強になったこと。正直これはコンパイラ先生に…

p691〜pまで

だいぶ間が開きましたが、続きのテンプレートの特殊化から。 テンプレートの特殊化 ・テンプレートの特殊化とは型ごとにテンプレートの定義を変更すること。 ・特殊化をすると完全に型が決まってしまうので、実装はヘッダファイルに記述することができない。…

今日はまだ仕事中

C++

そんかわり色々と自分のためのデバッグクラス作り中。ついでにコンポジットパターンにオブザーバーパターン勉強して適用して見た。コンポジットパターンはなんかCで初めて再帰習った時を思い出した。懐かしす。

p685〜p690まで

さてさて、以前やったテンプレートの補足事項がここででてきました。 http://d.hatena.ne.jp/niso1985/20080505/1209998856 http://d.hatena.ne.jp/niso1985/20080506/1210086809 テンプレート引数 テンプレート引数にはtypename以外も取れるよっていうお話…

p668〜p684まで

フレンド ・特定のクラスのオブジェクトの生成をあるクラスに一手に任せたい場合には有用。 ・ただし、本当に必要なときにのみ使うようにすること。 まぁ基本的には使わない方針ですね。デバッグ用クラスとか使うとしたらその辺りのみですね。 不完全型 これ…

p655〜p667まで

土日サボってた。あうあう。 インタフェースクラス 仮想継承を使ったインタフェースクラスは作ったことなかった。というか、仮想継承の存在を忘れていたわけで。 ・インタフェースクラスを仮想継承すれば、どんなに複雑な多重継承を行っても継承されたすべて…

パラメータをレジストリに設定/取得する方法

忘れていたのでメモ。 CString str; // 設定 CWinApp* app = AfxGetApp(); app->WriteProfileString(_T("Hoge"), _T("Key"), str); // 取得 // 3番目の引数に初期値を入れると最初に起動したときにだけその値を読み込み str = app->GetProfileString(_T("Hog…

sizeofの結果が0になる型

C++

なんかboostの中でsizeofの結果で返ってきたsize_tの値が0かどうかみたいな判定をしている部分があるらしい。 sizeofの結果が0になる型なんて本当にあるんだろうか?調べてみてもそういう事載ってないし・・・。(空のクラスの最適化とかでもないし。) 何かの…

p640〜p654まで

昨日(http://d.hatena.ne.jp/niso1985/20080514/1210774822)がっつり間違えた菱形継承。本日はそれを実装するための仮想継承について。 仮想継承 ・同じクラスを複数継承した場合、そのすべてにインスタンスが作られる。もし、一つのインスタンスを複数で共…

p632〜p639まで

ついに13章。多分この章が一番アツい。 多重継承 多重継承を扱う場合、一番大本の基底クラスを一次クラス、それを継承したクラスを二次クラス、さらにその二次クラス同士を継承したクラスを三次クラスとして話を進めます。 コード的にはこんな感じ。(各Hoge…

p599〜p629まで

今日からマクロ。C++じゃあんま使わないほうがいいっぽいけどどうなんだろ。まぁ適材適所ですか。Cでもあんまり使ったことなかったからこの際しっかり身につけとこう。 あと今日から引用表記を使うことにした。これで改行位置気にしなくていいぽ。 マクロの…

p566〜p598まで

ビット演算周り ここらへんはさくっといける。一応あとで引きやすいようにまとめだけやっとこう。 ・論理積は特定のビットを取り出すときに使う ・論理和はビット合成に使う ・排他的論理和は特定のビットを反転させるのに使う ・論理否定は論理積と組み合わ…

p539〜p564まで

昨日はなんだかんだで遊んでしまった。反省。しかし今日はなぜかやる気がでない。 参照を返す関数 ・privateメンバの参照を返す関数でprivateメンバの参照を得てほしくないときは、 そのメンバをあるクラスにしてラッピングするといいかもしれない。 こんな…

p512〜p538まで

お次は静的メンバについて。あと、そのほかもいけるところまでやっとくか。 静的メンバ変数 知らなかったこと、よく間違えることをつらつらと ・実体定義を行うほうにはstaticをつけない。(よく間違う) ・デフォルト引数に指定可能 ・必ず0で初期化される。(…

p503〜p510まで

とりあえず残りの例外部分でまとめとく。 標準例外クラス 実は例外クラスは標準でいろいろと用意されているので、それを継承して利用すると吉。 標準例外クラスは最基底クラスにexceptionクラスを持つ。このクラスではプロトタイプ宣言の後にthrow();という…

p476〜p502まで

やっとこさ折り返し。うーん、少しペースが遅いか・・・。 goto文 goto文は初期化を伴う変数宣言を飛び越えることができない。 ラベルの後には必ず何らかの文が必要。 p480 ここだけ抑えとけばいいかな。あとは理解してるはず。使わんけど。 例外 うーんうー…

p458〜p473まで

今日はクラステンプレート。 クラステンプレート うわ、この書き方知らんかった。 template <typename T> class Hoge { Hoge(); }; template <typename T> Hoge<T>::Hoge() { // do something... } いっつも宣言と定義一緒に書いてたぜ・・・。同一ファイルならこれで宣言と実装分けてか</t></typename></typename>…

p442〜p457まで

なんか今日は疲れてるんでちょっとだけ。勉強は毎日続けることが肝心だ。 関数テンプレート 昔、テンプレート引数をあるオブジェクト型のポインタにしようとして、テンプレート引数の参照はHoge*&になんのか?とか思って頭を抱えたことがある。まぁ普通にテ…