#include <iostream>
using namespace std;

struct A1
{
  void func() { cout << "classA1::func()" << endl; }
};
struct A2
{
  virtual void func() { cout << "classA2::func()" << endl; }
};
struct B1 : public A1
{
  void func() { cout << "classB1::func()" << endl; }
};
struct B2 : public A2
{
  void func() { cout << "classB2::func()" << endl; }
};
int main()
{
  B1 b1;
  B2 b2;

  A1* pa1;
  A2* pa2;

  pa1 = &b1;
  pa2 = &b2;

  pa1->func(); //①
  pa2->func(); //②
  return 0;
}