函数重载

一、重载原则

原则:

  1. 不允许两个函数除了返回类型以外其他所有的要素全部相同
  2. 顶层const不影响传入函数的对象,一个顶层const的形参无法与另一个没有顶层const的形参区分。
int fun(const int a);   //const普通变量,这个和下面的是一样的
int fun(int a);

int fun(int* a);        //顶层const,这个和下面是一样的
int fun(int* const a);
  1. 形参是指针或者引用时,底层const修饰的形参可以实现函数重载。
//4个fun函数各不相同
int fun(int &a)
{
    return 1;
}

int fun(const int &a)
{
    return 2;
}

int fun(int *a)
{
    return 3;
}

int fun(const int *a)
{
    return 4;
}


int main()
{
    int b = 10;
    int &a1 = b;
    const int &a2 = b;
    int *a3 = &b;
    const int *a4 = &b;
    std::cout << fun(a1) << std::endl;
    std::cout << fun(a2) << std::endl;
    std::cout << fun(a3) << std::endl;
    std::cout << fun(a4) << std::endl;
    return 0;
}

二、const_cast和重载

const string &shorterString(const string &s1, const string &s2)
{
    return s1.size() <= s2.size() ? s1 : s2;
}

string &shorterString(string &s1, string &s2)
{
    auto &r = shorterString(const_cast<const string &>(s1), 
                            const_cast<const string &>(s2));
    return const_cast<string &>(r);
}

int main()
{
    const string s1("abc");
    const string s2("abcd");
    string s3("asdfgh");
    string s4("asdfghjkl");

    cout << shorterString(s3, s4) << endl;
    return 0;
}

首先将实参转换成const引用类型,然后调用第一个实参为const版本的shorterString函数。接着将返回值强制转换为string的引用类型。

posted @ 2024-05-18 16:41  baobaobashi  阅读(4)  评论(0编辑  收藏  举报