2010-06-30
■ CJEと研究会
参加
■ STLとアルゴリズムとオーバーライド
以前C++について教えて貰ったときに,"アルゴリズム"について教えてもらったので調べてみる. vector Aからvector Bへ一部を移したいときにはremove_copy_ifという関数を使うと良いみたい. Aをfor文で回してBにpush_backしてたけど,こっちの方が効率良いみたい. listではremove_copy_ifはつかえないみたい.. 奥が深いなー.
あとちょっとハマったこととして,overrideで躓いた. 「型」の情報を渡さないといけない,ということで,
class A{ A(){}; int foo(){return 0;} } class B : A{ B(){}; int foo(){return 1;} } B test1(); test1.foo(); // 1が帰る
とこの辺りは普通の継承の話. 問題は,
A* pointer1 = &test1; B* pointer2 = &test1; pointer1->foo(); // 0が帰る pointer2->foo(); // 1が帰る
のようにポインターから呼び出したとき. 型の情報が渡っていないから,このようになる.
もしAが,pure virtual functionだったら, pointer1->fooからでも,1が帰るんだけどね. ちょっと躓いて,調べてもなかなか分からなかったのでメモメモ.