父类中已是虚拟函数,子类重新声明为虚拟的有意义吗?C++中呢?(50分)

  • 主题发起人 主题发起人 kaiwang
  • 开始时间 开始时间
没有意义的,只要在父类声明某个虚拟函数,其子孙类
都可以实现向上映射的多态性。

给一段很简单的C++程序

class farther
{
public:
virtual intro()
{
printf("I'm the father/n");
}
};
class son :public farther
{
public:
intro()
{
printf("I'm the son/n");
}
};
class grandson :public son
{
public:
intro()
{
printf("I'm the grand son/n");
}
};

main()
{
farther *a,*b,*c;
a = new farther;
b = new son;
c = new grandson;
a->intro();
b->intro();
c->intro();
}

运行结果是
I'm the father
I'm the son
I'm the grand son
 
看情况,在特定的场合下是有意义的(这就是Delphi允许你这样做却又给你警告的缘故),
其作用通常是“废旧立新”。
 
当然有意义,因为在孙类中可以再继承!!
子类中只要声明得正确,它也就是虚函数呀!声明得不正确,要么出错;
要么变成普通的函数重载。
 
父类中为虚函数,则子类中该函数无论有没有使用virtual,编译器都认为它是虚函数。
 
只要父类有虚拟函数的定义,则从子类起所有的继承类都会自动获得虚拟函数表,
无需显示声明。
 
接受答案了.
 
后退
顶部