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();
}