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区分的。this

// 如下两个函数一样造成函数重载
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++的编译期,编译器会根据参数列表对函数进行重命名,在函数名中按顺序加入参数类型以区分重载的函数。在函数调用时,则会根据实参类型逐个匹配重载的函数,失配则报错。也就是说,重载只是语法上的重载,重载的函数在编译后仍然是不一样的函数。这也就解释了为何只有函数签名不一样的函数才能构成重载。在编译完成以后,函数的重载也就肯定了。所以能够说,重载提供的多态性是静态的,或者说重载提供了编译期的多态性code

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息