C++中复制对象的动态绑定

ala*_*hen 0 c++ virtual-functions dynamic-binding

我在虚函数中遇到问题:以下是一些代码示例:

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;
            }
     };
  int main(void)
     {
         A a,*pa,*pb,*pc;
         B b;
         C c;
         pa=&a;
         pb=&b;
         pc=&c;

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

         a=b;
         a.print();
         return 0;
       }
Run Code Online (Sandbox Code Playgroud)

结果:A :: print()B :: print()C :: print()A :: print()

我知道它是一个多态,并且知道有一个名为virtual-function-table的表,但我不知道它是如何实现的,并且

   a=b;
   a.print();
Run Code Online (Sandbox Code Playgroud)

结果是:A :: print()不是B :: print(),为什么它没有多态性.谢谢!

Som*_*ude 5

该对象a仍然是类型 A.分配仅从数据复制b,它不会使a一个B对象.

这称为对象切片.