C++--函数重载、重写、重定义

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

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

#include
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
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
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
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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值