当前位置:编程学习 > C/C++ >>

C++虚函数探讨(三)

 

环境:VS2010

代码:

 

#include <iostream> 

using namespace std; 

 

 

class A{ 

public: 

    virtual void func1(int i){ 

    cout <<"A::func1()"<<endl; 

    }  

    virtual int func2(float f){ 

    cout <<"A::func2()"<<endl; 

    return 0; 

    } 

}; 

 

class B:public A{ 

    virtual void func1(int i){ 

    cout <<"B::func1()"<<endl; 

    }  

    virtual int func2(int i){ 

    cout <<"B::func2()"<<endl; 

    return 0; 

    } 

}; 

 

int main(void){ 

   B b; 

   A *p = &b; 

 

   p->func1(0); 

   p->func2(0); 

   return 0; 

 

 

读者可以考虑输出结果。

www.zzzyk.com

运行效果截图:

\

 

分析:指针p是指向派生类的基类指针,派生类B里的fun2:virtual int func2(int i),基类A里的func2:virtual int func2(float f),仔细观察它们的参数类型不一致,自然p->func2(0);这句话的输出是基类的虚函数的内容,即使它传的参数是int型(匹配到基类的虚函数后,参数自动转换成float)。

总结:若要是虚函数的机制有效,则派生类的虚函数必须和基类的虚函数完成一致(当然从基类继承的派生类里的虚函数可以不加virtual)

 

 


作者 Wentasy
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,