c++函数重载与运算符重载

文章目录

重载:同一件事情可能因为场景不同,我们需要有不同的处理方式,比如2维求距离和3维求距离

函数重载

相同名字,不同参数的函数 注意:函数重载只看参数个数和类型

  • C++允许我们对函数进行重载。用不同的参数来区分重载的函数
  • 编译器会判断我们传入的参数来寻找正确的函数,这个过程叫重载决策
  • 利用函数重载我们可以写适应不同输入的函数,简化我们的函数的调用过程
  • 重载不需要特别的形式说明,只需要写两个名字相同,参数不同的函数即可

函数重载只看参数个数和类型,不看返回值
但不能出现只是返回值不同的重载

int biggest(int a,int b);
{
	...
}
float biggest(int a,int b)
{
	...
}

运算符重载

很多时候我们需要我们自己定义的类也能够支持运算符的操作

类外定义重载操作符的方法如下:
返回类型 operator操作符(参数表) {

return 返回类型
}

参数表可以是类Human,可以是int, string等等

#include <iostream>
#include <string>

using namespace std;

// 函数重载
double add(int a, int b) {
    return a + b;
}

double add(int a, string s) {
	int n = s.size();
	return a * n;
}

int add(int a, int b, int c) {
    return a + b + c;
}

class Human {
public:
    Human() {
    }

    Human(int age)
        : age_(age) {
    }

    // Get/Set函数
    int get_age() {
        return age_;
    }

    void set_age(int age) {
        age_ = age;
    }

private:
    string name_;
    int age_;
};

// 运算符重载
int operator-(Human A, Human B) {
    return A.get_age() - B.get_age();
}

Human operator&(Human A, Human B) {
    return Human(A.get_age() + B.get_age()); // 要有对应的构造函数
}


int main() {
    // 调用方法 对象名.成员名
    Human lihua(30), hanmeimei(28);

    // Human temp = lihua & hanmeimei 也可以暂存返回值
    cout << "父母年龄和(add函数重载1): " << add(lihua.get_age(), hanmeimei.get_age()) << endl;
    cout << "父母年龄和(运算符重载&): " << (lihua & hanmeimei).get_age() << endl;
    cout << "父母年龄差(运算符重载-): " << lihua - hanmeimei << endl;
    cout << endl;

    cout << "add函数重载2: " << add(4, "we") << endl;
    cout << "add函数重载3: " << add(1, 2, 3) << endl;

    return 0;
}
上一篇:构造函数


下一篇:Python的类的继承