1: 父类的指针指向子类的地址,然后调用虚函数
列子:
#include<iostream>
 #include<memory>
class A
 {
 public:
     A() = default;
     virtual ~A() = default;
     virtual void display()
     {
         std::cout << "A" << std::endl;
     }
 };
class B :public A
 {
 public:
     B() = default;
     virtual ~B() = default;
     virtual void display()
     {
         std::cout << "B" << std::endl;
     }
 };
int main()
 {
     std::shared_ptr<A> ptr = std::make_shared<B>();
     ptr->display();
 }
2: new之类的地址,调用被继承的函数,再被继承的函数中调用虚函数
#include<iostream>
 #include<memory>
class A
 {
 public:
     A() = default;
     virtual ~A() = default;
     void display1()
     {
         display();
     }
    virtual void display()
     {
         std::cout << "A" << std::endl;
     }
 };
class B :public A
 {
 public:
     B() = default;
     virtual ~B() = default;
     virtual void display()
     {
         std::cout << "B" << std::endl;
     }
 };
int main()
 {
     std::make_shared<B>()->display1();
 }