C++ の参照型で多態は効くのか。
経緯
ブログも久々だが C++ も久々で、書いているとどうにもポインタを触りたくないために、できるだけ参照型で物事を済ませたかった。のだが、そういえば参照型って多態効くんだっけと思って調べたがググらビリティが低かったので自分で調べた。
結果
効く。
test.cpp
#include <stdio.h> class Base { public: virtual ~Base() {} virtual void func() { printf("Base class function.\n"); } }; class ChildA : public Base { public: ~ChildA() {} void func() { printf("ChildA class function\n"); } }; class ChildB : public Base { public: ~ChildB() {} void func() { printf("ChildB class function\n"); } }; int main() { Base base; ChildA a; ChildB b; Base &baseRef(base); Base &aRef(a); Base &bRef(b); baseRef.func(); aRef.func(); bRef.func(); }
result
>g++ test.cpp >a.exe Base class function. ChildA class function ChildB class function
へー。まあでもそれもそうか。一安心。