class A
{
public:
A()
{
printf("create A \n");
}
virtual ~A()
{
printf("delete A \n");
}
virtual void fun()
{
printf("call A \n");
}
};
class B:public A
{
public:
B()
{
printf("create B \n");
}
~B()
{
printf("delete B \n");
}
void fun()
{
printf("call B \n");
}
};
void Function(A& a)
{
a.fun();
}
/********************************************
C++的多态性是由派生类重载基类中的虚函数而实现的
列如:
B b;
Function(b);
基类A中的 fun 函数前如果加了 virtual, Function函数中a.fun则调用B类的fun函数
基类A中的 fun 函数前如果没加 virtual, Function函数中a.fun则调用A类的fun函数
这就体现了C++的多态性
C++的虚析构函数(用来防止内存泄露)
列如:
A* a = NULL;
B* b = new B;
a = b;
a->fun();
delete a;
基类A中的 析构函数 前如果加了 virtual, delete a释放对象时先调用B的析构函数,在调用A的析构函数
基类A中的 析构函数 前如果没加 virtual, delete a释放对象时只调用A的析构函数
因此基类中的 析构函数 最好定义为 虚析构函数
********************************************/
C++的多态性 虚函数 虚析构函数
最新推荐文章于 2024-05-12 09:06:34 发布