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が帰るんだけどね. ちょっと躓いて,調べてもなかなか分からなかったのでメモメモ.