C++:Overload

重载

函数签名是指函数的参数个数,参数类型以及参数的顺序。重载的定义是:在同一作用域内函数签名不同但函数名相同的函数互为重载

// 以下几个函数互为重载
void print();
void print(int a);
void print(double a, int b);
void print(int a, double b);
void print(string a, double b);

参数的不同也可以是通过const区分的。

// 以下两个函数同样形成函数重载
void print(int &a);
void print(const int &a);
// 声明成员函数为const即指定this指针为const,同样可以构成重载
class LiF {
public:
    void print();
    void print() const;
};

函数的形参名不同或返回值类型不同并不构成重载,并且编译报错,因为这类函数被编译器识别为相同函数。

// 重定义print,编译报错
void print(int a);
void print(int b);
// 重定义print,编译报错
void print(int a);
int print(int a);

重载是如何实现的

在C++的编译期,编译器会根据参数列表对函数进行重命名,在函数名中按顺序加入参数类型以区分重载的函数。在函数调用时,则会根据实参类型逐个匹配重载的函数,失配则报错。也就是说,重载只是语法上的重载,重载的函数在编译后仍然是不同的函数。这也就解释了为什么只有函数签名不同的函数才能构成重载。在编译完成之后,函数的重载也就确定了。因此可以说,重载提供的多态性是静态的,或者说重载提供了编译期的多态性

转载于:https://www.cnblogs.com/Li-F/p/11537313.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值