Kha*_*lid 2 c++ overriding virtual-functions
class A
{
public:
virtual void display_A(A* obja)
{
cout<<"Class A"<<endl;
}
};
class B:public A
{
public:
void display_A(B* objb)
{
cout<<"Class B"<<endl;
}
};
int main()
{
A AOBJ;
B BOBJ;
A *obja = new B();
obja->display_A(&AOBJ);
obja->display_A(&BOBJ);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
A类中有一个虚函数,参数为as A*,我们在derived class Bwith参数中覆盖了相同的函数B*.
我创建了一个指向派生类对象的指针obja(指向类的指针A)B.当我display_A用obja带有参数的指针调用函数作为类A对象指针和类B对象指针时,我得到了o/p as
Class A
Class A
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么我会得到那个o/p.
它没有覆盖,因为参数的类型不一样.
如果某个成员函数vf在类Base中被声明为virtual,并且某个类Derived(直接或间接地从Base派生)具有成员函数的声明,具有相同的成员函数
Run Code Online (Sandbox Code Playgroud)name parameter type list (but not the return type) cv-qualifiers ref-qualifiers然后,Derived类中的此函数也是虚拟的(无论关键字virtual是否在其声明中使用)并覆盖Base :: vf(无论是否在其声明中使用了字覆盖).
使用override说明符可以帮助您在编译时找到错误.
指定虚函数覆盖另一个虚函数.
在成员函数声明或定义中,override确保该函数是虚函数并从基类重写虚函数.如果不是这样,程序格式不正确(生成编译时错误).
class B:public A
{
public:
void display_A(B* objb) override
// ^^^^^^^^
{
cout<<"Class B"<<endl;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |