#include <iostream>
using namespace std;
class A{
public:
virtual void f(){cout<<"class A"<<endl;}
};
class B:public A{
public:
virtual void f(){cout<<"class B"<<endl;}
};
void test(A& a)
{
a.f();
}
void test(A* pa)
{
pa->f();
}
int main()
{
B b;
A a=b;
test(a);//结果为class A,因为a从b切片后,编译器会自动调整a对象的virtual point指向对象A
cout<<endl;
B* pb=new B();
A* pa=(A*)pb;
test(pa);//结果为class B,因为指针pa指向的还是对象B的地址,调用的还是B的virtual point指向的class B的f()
return 0;
}
一个C++中的关于虚函数的小例子
最新推荐文章于 2025-04-05 22:30:49 发布