ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-09-26 17:01:48  阅读:207  来源: 互联网

标签:return 函数 int age c++ 运算符 Human 重载


文章目录

重载:同一件事情可能因为场景不同,我们需要有不同的处理方式,比如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;
}

标签:return,函数,int,age,c++,运算符,Human,重载
来源: https://blog.csdn.net/qq_43827595/article/details/101453499

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有