C++覆盖问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:36:37
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
class A
{
public:
A(void)
{}
void vf1(void)const
{
cout<<"基类的vf1()函数"<<endl;
}
};
class B:public A
{
public:
B(void)
{}
void vf1(void)const
{
cout<<"派生类的vf1()函数"<<endl;
}
};

void main(void)
{
A *pa;
A myA;
B myB;

pa=&myA;
pa->vf1();
pa=&myB;
pa->vf1();

}
为什么会输出基类的vf1()函数,不是覆盖了么·为什么不输出派生类的vf1()函数
是· · 如果加上VIRTUAL的确可以··,但是同名函数应该会被覆盖的呀 ,,,2 楼说的了解了很多 先谢谢了·· ·你基类的函数被隐藏了··为什么还输出了 = =···(初学··谢谢指教)

覆盖的特征有:

1) 不同的范围(分别位于派生类与基类);

2) 函数名字相同;

3) 参数相同;

4) 基类函数必须有virtual关键字。

隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

1) 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

2) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

你所问的,正是C++的虚函数机制解决的问题,C++的多态性表现之一,就是根据不同对象调用不同的操作行为,即基类指针可以指向子类对象,在虚函数机制下,可以调用子类的成员函数,从而达到了多态的效果。

如果不考虑虚函数机制,那么应该是函数覆盖。

父类的此方法要声明为虚方法子类才可以覆盖。。