////////////////////////////////////////////////////////////////////////////////////////////////////////////SpecialSample2 //仮想関数Virtual //何が何でも実態にくっついている仮想関数を実行するってことかなー? //基本クラスのふりして扱っておいて、実際には派生クラスの関数が呼び出されたり その逆も有り。 //便利に使えれば良いけどナー 難しいナー プログラム読みにくいしナー ////////////////////////////////////////////////////////////////////////////////////////////////////////////SpecialSample2 class base { public: void func1() { TRACE("base func1\n"); } virtual void func2() { TRACE("base func2\n"); } }; class derivation : public base { public: void func1() { TRACE("derivation func1\n"); } virtual void func2() { TRACE("derivation func2\n"); } }; void CShareDlg::OnButton145() { // //普通に使う場合 // base a; a.func1(); a.func2(); derivation b; b.func1(); b.func2(); // //実態を他の型に変換(キャスト?) //ここでは基本クラスにした // base *c; c = &a; c->func1(); c->func2(); c = &b; c->func1(); c->func2();//<-- 注目 派生クラスのfunc2が実行 // //実態を他の型に変換(キャスト?) //ここでは派生クラスにした // derivation *d; d = (derivation *)&a; d->func1(); d->func2();//<-- 注目 基本クラスのfunc2が実行 d = &b; d->func1(); d->func2(); }