フェルマータ

個人用のメモ。ソフトウェアの導入とかが多くなる予定。

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

へー。まあでもそれもそうか。一安心。