c/c++

オーバーロードは砕けない

タイトルはどうでも良い!! 要するに名前が同じで引数が違うメンバ関数は継承先で引き継がれないよ、ということ。どういうことかと言うと、 class A { public: void setTarget(A* a) { a_ = a; } private: A* a_; }; こんなのがあるとする。 ターゲットとし…

メンバ関数ポインタは仮想関数を正しく呼び出せるか?

呼び出せる。 class A; typedef void (A::*member_function)(); class A { int a; public: virtual ~A(){} virtual void f() { printf("A::f\n"); } virtual void m() { printf("A::m\n"); } virtual void n() { printf("A::n\n"); } void execute(int funct…

vtblを使って無理矢理呼び出す(実用度0)

デストラクタの振る舞いが意外と反応あったので派生です。C++には仮想関数を実現するために、 vptr、vtblというのがあるというのは先日書きました。書きました。書きました。ポインタが4バイトの環境で、 多くの場合、 class A { int a; public: virtual voi…

デストラクタの振る舞い

職場で 継承先でデストラクタを省略したり、 virtualとつけなかったらどうなるの? って言われたので、 「基底クラスに従うんだぜふじこ!」(ふじこは長いので略) とかいう話をした。質問者が何を心配してたかっていうと、 基底Aを継承したB、 Bを継承した…

あせんぶりはさいこうのぽいんたのきょうかしょ 

タイトルはうそだようそ! 404 Not Found きむら(K)さん経由。 ポインターを理解できない人は、アッセンブラコードで考える事をお勧めします。僕は、8086で勉強しました。たとえば、++と言う演算子はなぜ導入されたのかとかも分かるようになります。 ax ++; …

グローバル変数は外部参照すべきか?

突然ですが、グローバル変数をやもえず外部参照する場合、 以下のような方法が考えられると思います。 // ヘッダファイルの記述(key.h) extern ST_KEY Key;// ソースファイルの記述(key.c) ST_KEY Key; これは慣例らしく、色々なところに普及されている…

C++でメモリに困ることはない?

RHGの逆襲第六回の懇談会で、 C++でメモリに困ることはないっていうことを 多分、shinhさんが言っていて 自分はいや、すっごい困るよ、ってな反応を思わずしてしまったんだけれども、 実際メモリが潤沢な環境が多いわけで、 うーあーうーとか言った後で思っ…

コンパイラ入門

きむら(K)さん経由で知って買った本です。 構文解析とは、とか、字句解析とは、といった基礎的なところから始まって、 lex/yaccの使い方などを押さえ、LL(1)、LR(0)、SLR、LR(1)、LALR(1)などの解析方法をサラッと紹介している。 基礎を押さえた本。 ただ、i…

call by value, call by reference?

気になったのが、配列は関数に渡す事が出来ない。ってのも、失念していたかも。 値渡しが出来ない。って意味なんだろうけれど、これも、配列を値渡ししようと思ったことがないので、気にしたことがなかった・・・配列を何かしたいときは、disp_pointerな感じ…

さほど実用的でもないポインタと配列の違い

経験から、ポインタと配列を混同している例をみたことがあるので、それを提示。 あまりマニアックな動作だと役に立たないかもとか。例えば、自分は下記のようなデータ構造をよく使う。 可変長のデータ構造で、 先頭に個数が入っており、その個数分のデータが…

やばい、俺ポインタわからないっすよ!!!

やばい、宿題きた。 ポインタってのはあれだよ。 「『難しい難しい』と云っている人が考えているほどには難しくない」 けど 「『簡単簡単』といっている人が考えているよりは簡単じゃない」 んだよ。 ... あ、ポインタと配列が違うということがはっきりわか…

やはりCのポインタは難しいものだ……

ポインタと配列は一緒のもの? 違うよ、全然違うよ。 前に、同じ年の人が一時的に今の職場に来て、C言語できる。というから、ポインタと配列の違いが解かります?って聞いたら 「え?ポインタも配列も同じじゃないっすか。」 と言われた。 そうだよね。理解…

コンストラクタでの仮想関数呼び出し

Hoge() { reinterpret_cast<HogeInher*>(this)->hoge(); // とか HogeInher::hoge(); // こいつがstaticだとして // とか? } こんなことやる人いんのかな・・・。 コンストラクタからの仮想関数呼び出しはNG - くそにそてくにっく ありゃ、って思ったので。 そんな記法を</hogeinher*>…

突っ込もうと思ったら

もうid:bleis-tiftさんが突っ込んでた。 きむら(K)さん経由。 しかし、その解答はそこに書き込んでいる人には理解できない、とか思ったりもして。 さすがはC++、そこに痺れる、憧れるぅ。 しかし、Bjarne Stroustrupの名前がでているのに継承できないことに…

どうしてこんなにむかつくのか?

まともな仕事をしない人間に対して なぜこんなにも自分がムカムカと来たのか、残しておく。要するに与えられた事をするだけが仕事じゃねーだろ? ってことなんだろうと思う。自分がこんなにもむかついている相手というのは、 スキルはないが、 責任の所在は…

そのうち直そうと思っていた

不在の時に見つけたバグその他諸々ソース直したら文句キター! そのうち直そうと思っていたとか言われたー! いや、履歴みたらお前1ヶ月以上ずっと触ってなかっただろwwww ソースいじれる時間なんて残り少ないのに「そのうち」っていつだよwwww勝手に…

動的に更新できるのがお気に入り

最近は、Excelの値を書き換えて、 ボタンをぽちっと押してゲーム中でリロードかけると 再起動なしで値がゲーム内に反映されるのがお気に入り。 さておき、 乱数は int randomInt( int x, int y ) { return rand()%(y-x+1)+x; } とかでいいんじゃないかなぁ、…

本日の(俺のではない)バグ

俺はもう疲れたよ、ママン……。 #define max(a, b) (((a) > (b)) ? (a) : (b)) #define min(a, b) (((a) < (b)) ? (a) : (b)) #define HOGE01 (1) #define HOGE10 (10) int randInt( int range ) { return rand() % (range+1); } int main() { ... int hoge =…

ですよねー。

forループ使ったら負けかなと思ってる ですよねー。 俺、オワタ\(^o^)/ for_each(handleSet.begin(), handleSet.end(), mem_fun(&Handle::print)); とか、俺も書きたい!

ノーガード戦法

久々にすべてpublicのclassを見たぜ……。 これだから三十代のプログラマは侮れない。(予想外的な意味で) hoge = Hoge::HogeList[select]; とか外部のクラスから呼び出していて、これはひどい。 (要するにあらゆる意味でアクセッサという概念がない)という…

ポインタのポインタが返ってくるでござる

STLのiteratorにおけるoperator->()とoperator*()に関して。例えば、 Handleクラスのポインタを格納したコンテナsetがある場合、 イテレータに対する*itは参照を返してくれるので「Handle*」が得られるが、 イテレータに対するit->はポインタを返すので、「H…

簡単にマスターできてむかつくじゃん

またきむら(K)さん経由 もしスクリプト言語すすめちゃったら、簡単にマスターできてむかつくじゃん。 404 Not Found ってなことはない、ような気がする。 CやC++はともかくとして、 RubyもPythonも「簡単に」マスターできるような言語か? 無理じゃね? 「言…

it->とか書いたことないなぁ(多分嘘)

きむら(K)さんのところから。 STLの解説とかで (*it).first とか書いてあるのはあくまで説明用であって普通は it->first と書く。 > 演算子を使った場合には解析でドジじる場合がある (多重定義されたとき?)ので前者のように書け。 とどこかで見たようなお…

気まぐれにSTL再考

そういえば、JavaでArrayListとLinkedListはListインターフェイスにうけたほうが良いor受けるべき、みたいな議論をみかけて、 それは即ち「抽象化」であり、 可変長配列であろうと、連結リストであろうと、意識せずに使えるようにするのであり、 かつまた、…

こないだ見た衝撃的ソースコード

// とあるライブラリの関数 int FindFoo(char* name) { // 文字列を渡すとデータをサーチしてFooのハンドルを返す return 0;// 適当 } // その人が書いた我々が使うためのインターフェイスとなるラッパー関数 int GetFoo(unsigned short* name) { return Fin…

参照のこと

ん、少なくとも一個抜けてると思うな :) 404 Not Found ぐは。 すみません。orz・再代入できない(既にある参照を別の要素を指す参照にすることはできない ってことかしら……。加えて、参照を用いると 関数の呼び出しがlvalueになれるのも良い。これは、参照…

コンストラクタが呼ばれた時点で初期化が終了してないとイヤだってじっちゃが言ってた

クラスのメンバ変数を参照で持つことは、私んちはそんなにしていません。 参照でHoldするメンバがいる場合、必ずコンストラクタ初期化子で初期値を指定してあげなくてはならないのですが、私んちは、initialize(と言う名前のただのメンバ)関数で依存性注入…

参照を使うのは何故だろう?

ということで、C++FAQから引用。 リファレンスにできることはポインタにもできる。 それなのに、それでもリファレンスを使うのはなぜか。いくつかの用途で、リファレンスのほうがポインタよりも優れているからだ。 リファレンスが使えるところでポインタを利…

参照が使えるときはいつでも参照を使いましょう

TBをいただいたのと今日はたまたま早く帰宅できたので反応! はてなダイアリー 素晴らしい事にお気づきになられました。 誰だC++に参照なんていう概念を持ち込んだカスは。 びょーんすっぽすっぽ先生を虐めないで>< ということで、マジレスをすると、 参照…

ポインタはポインタだろ!

いえ、嘘です、ごめんなさい。僕がポインタを学んだときにまず考えたのは、 「ポインタはその変数に入っているメモリアドレスが何の型であるか、を指し示すものである」 というようなことだった、ような気がしている。int* hoge なら、hogeが持っている値が…