重载 覆盖 隐藏

来源:互联网 发布:运动摄影软件 编辑:程序博客网 时间:2024/06/10 18:55

重载 覆盖 隐藏的区别(函数名都相同)
重载:多个函数都存在,根据参数不同选择调用函数
例如:

//声明(定义在此处省略了)int Add(int a, int b);  //函数1int Add(float a, float b);  //函数2int ia = 0, ib = 0;float fa = 0.0f, fb = 0.0f;//调用Add(ia, ib);    //调用函数1Add(fa, fb);    //调用函数2

覆盖:函数名相同、参数相同、有virtual关键字,根据指针所指对象的类型来选择不同类中的函数
例如:

#include <iostream>using namespace std;class class1{publicvirtual void Print()    {         cout << "调用 class1 中的函数" << endl;    }};class class2 : public class1{publicvoid Print()    {        cout << "调用 class2 中的函数" << endl;    }};int main(){    class1* p = new class2;    p->Print(); //调用class2中的函数    delete p;    p = new class1;    p->Print(); //调用class1中的函数    delete p;    return 0;}

隐藏:函数名相同、参数不一定相同、没有virtual关键字,根据指针的类型来选择指针类中的函数
例如:

#include <iostream>using namespace std;class class1{publicvoid Print(int a)    {         cout << "调用 class1 中的函数" << endl;         cout << "输出:" << a << endl;    }};class class2 : public class1{publicvoid Print(float a)    {            cout << "调用 class2 中的函数" << endl;            cout << "输出:" << a << endl;    }};int main(){    class1* p = new class2;    p->Print(1); //调用class1中的函数    delete p;    p = new class1;    p->Print(2.0f); //调用class1中的函数, 2.0f被转换为2i    delete p;    return 0;}

已在VS2013上通过测试

0 0
原创粉丝点击