多态:
子类中对父类已有成员函数进行重新定义(返回类型和参数不变,只是改变函数的
内部代码实现方式, 否则就是重载而非多态), 并加上virtual声明为虚函数,从
而形成多态, 在调用此系列成员函数时由对象所属的类自动来区别调用哪个函数.如
下虚函数的实现:
class A
{
public:
virtual int getAge()
{
}
}
class B :public A
{
public:
virtual int getAge()
{
}
}
有关虚函数限制:
1) 只有类的成员函数才能成为虚函数
2) 静态成员不能是虚函数, 因为它不受限于具体对象,静态成员属于整个类,它
不属于某个具体的对象。
3) 内联函数不能是虚函数, 因为它不能在运行中动态确定其位置,内联函数在编
译时就确定了函数的调用地址。
4) 构造函数不能时虚函数, 因为构造时对象还是一片未定型的空间,构造函数执
行的时候对象还是未确定的。
5) 析构函数可以是虚函数, 而且通常声明为虚函数, 如基类对象和子类对象以不
同方式申请了堆空间后:
void finishWithObject(Base *pHeapObject)
{
//..
delete pHeapObject;
}
pHeapObject是传递过来的一个对象指针, 它或者指向基类对象或指向子类对象
。 在执行delete pHeapObject时, 要调用析构函数,但是执行基类的析构函数?
还是执行子类的析构函数? 将析构函数声明为虚的,就可以解决这个问题。程序会
根据pHeapObject具体的类型来决定到底是调用父类还是子类的析构函数。