关于一个指针和继承的有关问题,小弟我想问问大家,为什么输出的是这样的

关于一个指针和继承的问题,我想问问大家,为什么输出的是这样的?
先上代码吧!
C/C++ code

#include<iostream>
using namespace std;

class A
{
    public:virtual void print(void)
        {
            cout<<"A::print()"<<endl;
        };
};

class B:public A
{
    public:virtual void print(void)
        {
            cout<<"B:print()"<<endl;
        };
};

class C:public A
{
    public:void print (void)
        {
            cout<<"C:print()"<<endl;
        };
};

void print(A a)
{
    a.print();
}

int main(void)
{
    A a,*pa,*pb,*pc;
    B b;
    C c;

    pa=&a;
    pb=&b;
    pc=&c;

    a.print();
    b.print();
    c.print();

    pa->print();
    pb->print();
    pc->print();

    print(a);
    print(b);
    print(c);

    return 0;
}



以上代码的输出结果是:
A::print()
B::print()
C::print()
A::print()
B::print()
C::print()
A::print()
A::print()
A::print()
前六个我还能明白,可是为什么接下来三个全输出A::print()呢,有知道的帮忙解答一下吧,不胜感激。

------解决方案--------------------
由于对象的静态类型与动态类型一样,所以通过对象无法体现出多态的特性,只有指针和引用才能体现。
------解决方案--------------------
就是C++中的多态是通过指针和引用来实现的,你的全局函数print的参数是一个对象,不能动态调用各类中的成员函数
------解决方案--------------------
C++中的多态是基于指针/引用的。