C++函数重载,重写,重定义

99封情书 提交于 2019-12-09 15:58:36

  C++中经常会提到重载,除了重载,还有重写,重定义,下面对这三个概念逐一进行区分

1 重载

  函数重载是同一定义域中(即同一个类中)的同名函数,但形参的个数必须不同,包括参数个数,类型和顺序,不能仅通过返回值类型的不同来重载函数

#include<iostream>
using namespace std;

class BOX
{
    void func(int a, int b, int c){} 
   
    void func(int a, int b){} // 参数个数不同

    void func(int c, int b, int a){} // 参数顺序不同

    int func(int a, int b, int c){} // **返回值类型不同,不能说明是重载函数**
};

int main()
{
    BOX box;

    return 0;
}

2 重写

  在父类和子类中,并且函数形式完全相同,包括返回值,参数个数,类型和顺序
  父类中有vietual关键字,可以发生 多态

#include<iostream>
using namespace std;

class BOX
{
    virtual void func(int a, int b, int c = 0) //  函数重写 
    {

    }

};

class squareBox: public BOX
{
    void func(int a, int b, int c = 0)
    {

    }
};

int main()
{
    BOX box;
   
    return 0;
}

3 重定义

  重定义和函数重写类似,不同的地方是重定义父类中没有vietual关键字,不可以发生 多态

#include<iostream>
using namespace std;

class BOX
{
    void func(int a, int b, int c = 0) //**没有virtual关键字,函数重定义**
    {

    }

};

class squareBox: public BOX
{
    void func(int a, int b, int c = 0)
    {

    }
};

int main()
{
    BOX box;
   
    return 0;
}

4 函数重载二义性

  当函数重载遇上默认参数时,会出现二义性
  如下代码所示:

#include<iostream>
using namespace std;

class BOX
{
    void func(int a, int b, int c = 0)
    {

    }

    void func(int a, int b)
    {

    }
};

int main()
{
    BOX box;
    box.func(1, 2); // **此函数不知道调用上面哪一个**

    return 0;
}

  C++中经常会提到重载,除了重载,还有重写,重定义,下面对这三个概念逐一进行区分

1 重载

  函数重载是同一定义域中(即同一个类中)的同名函数,但形参的个数必须不同,包括参数个数,类型和顺序,不能仅通过返回值类型的不同来重载函数

#include<iostream>
using namespace std;

class BOX
{
    void func(int a, int b, int c){} 
   
    void func(int a, int b){} // 参数个数不同

    void func(int c, int b, int a){} // 参数顺序不同

    int func(int a, int b, int c){} // **返回值类型不同,不能说明是重载函数**
};

int main()
{
    BOX box;

    return 0;
}

2 重写

  在父类和子类中,并且函数形式完全相同,包括返回值,参数个数,类型和顺序
  父类中有vietual关键字,可以发生 多态

#include<iostream>
using namespace std;

class BOX
{
    virtual void func(int a, int b, int c = 0) //  函数重写 
    {

    }

};

class squareBox: public BOX
{
    void func(int a, int b, int c = 0)
    {

    }
};

int main()
{
    BOX box;
   
    return 0;
}

3 重定义

  重定义和函数重写类似,不同的地方是重定义父类中没有vietual关键字,不可以发生 多态

#include<iostream>
using namespace std;

class BOX
{
    void func(int a, int b, int c = 0) //**没有virtual关键字,函数重定义**
    {

    }

};

class squareBox: public BOX
{
    void func(int a, int b, int c = 0)
    {

    }
};

int main()
{
    BOX box;
   
    return 0;
}

4 函数重载二义性

  当函数重载遇上默认参数时,会出现二义性
  如下代码所示:

#include<iostream>
using namespace std;

class BOX
{
    void func(int a, int b, int c = 0)
    {

    }

    void func(int a, int b)
    {

    }
};

int main()
{
    BOX box;
    box.func(1, 2); // **此函数不知道调用上面哪一个**

    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!