由dynamic_cast引发的多态有关问题

由dynamic_cast引发的多态问题
为了测试dynamic_cast的用法,设计了间单的程序:
#include<iostream>

using namespace std;

class A{};

class B:public A{};

class C:public B{};

int main()
{
  A a;
  B b;
  A *pa = dynamic_cast<A*>(&b);
  if(pa==NULL){cout << "子转父转换失败!" << endl;}
  else cout << pa << endl;
//   C *pc = dynamic_cast<C*>(&b);
//   if(pc==NULL){cout << "父转子转换失败!" << endl;};
  return 0;
}

子转父成功转换:
由dynamic_cast引发的多态有关问题
父转子编译失败:
由dynamic_cast引发的多态有关问题
问题如下:
1 dynamic_cast应用应该是与多态和虚函数相关的,但是上面的三个类均没有虚函数,却完成了子转父的转换,
2 添加了父转子转换后程序编译不通过了,难道不应该是指针返回NULL吗?
------解决方案--------------------
变量a和b就和class C没有关系,你没看出来吗?能转化成功才是问题。。。