为什么要在基类中定义虚函数?

C++中的题目,求高手指点

原因是:基类通过虚函数可以对多个子类相似的功能实现统一管理。
例子:
A为基类,B、C为A的同级子类。virtual只需在基类中标识一次,子类无需重复标识。
class A
{
virtual void display(){cout<<"是A"<<endl;}
}
class B:public A
{
void display(){cout<<"是B"<<endl;}
}

class C:public A
{
void display(){cout<<"是C"<<endl;}
}

void display(A s)//以A类型作为参数的顶层函数,不同于类中的成员函数
{
s.display();//调用对象s的成员函数
}
int main()
{
A x1;
B x2;
C x3;
display(x1);//显示:是A。
display(x2);//参数x2向上转换为x1类型,显示:是B。
display(x3);//参数x3向上转换为x1类型,显示:是C。
}
通过显示可以注意到以下两点:
1、尽管在顶层函数的定义中是以基类A作为其参数,但却能接受基类A的任一子类作为其参数。事实上,这是基于自动向上类型转换,即子类转换为它的父类型。
2、虽然子类转换成了它的父类型,但却可正确调用属于子类而不属于父类的成员函数。这是虚函数的功劳。
这样,通过设计一个以基类型作为参数的顶层函数,就可实现基类及其所有子类相似功能的统一管理,而不用理会不同对象自身的类型。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-18
在下面的函数中我们如下应用delete 表达式
void doit_and_bedone ( vector< Query* > *pvec )
{
// ...
for ( ; it != end_it; ++it )
{
Query *pq = *it;
// ...
delete pq;
}
}
为了使函数能够正确执行,在应用delete 表达式时,必须调用pq 指向的动态类型的析构函数。为此,必须把Query 类析构函数声明为虚拟的。
本回答被网友采纳
第2个回答  2011-05-18
使成员函数能在派生类中重定义
相似回答