码迷,mamicode.com
首页 > 其他好文 > 详细

学习:类和对象——运算符重载

时间:2019-11-15 14:22:27      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:方法   tor   out   include   成员   私有变量   数据   功能   改变   

什么是运算符重载?

运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

对于个人而言,学到这里的感受就是,多了一种能够自定义方式来进行运算的方式吧,通过类似语法糖的效果operator+来自动实现相应的操作


+号运算符重载:

作用:实现两个自定义数据类型相加的运算

在+号运算符重载里面,我们可以通过两种方式来定义,一种是成员函数来实现,还有一种全局函数来实现

同样的调用方法也有两种,以下代码有体现

示例代码:

#include<iostream>
#include<string>

using namespace std;

class Person{
public:

    //成员函数实现 + 号运算符重载
    //Person operator+(Person &p1) {
    //  Person temp;
    //  temp.age = this->age + p1.age;
    //  return temp;
    //}

public:
    int age;
};

//全局函数 实现+号运算符重载
Person operator+(Person &p1, int val) {
    Person temp;
    temp.age = p1.age + val;
    return temp;
}

int main() {
    Person p1;
    p1.age = 20;
    //Person p2 = p1.operator+(p1); //调用方式有两种,这是第一种
    Person p2 = p1 + 10;//这是第二种调用方式
    cout << p2.age << endl;
    system("pause");
    return 0;
}

总结1:对于内置的数据类型的表达式的的运算符是不可能改变的

总结2:不要滥用运算符重载


左移运算符重载

通过左移运算符重载,我们可以实现输出自定义数据类型,比如 cout << 对象 << endl,实际输出的是 cout << 对象.a << endl

#include<iostream>
#include<string>

using namespace std;

class Person {
    friend ostream & operator<<(ostream & cout, Person & p); //因为a,b是私有成员变量,所以我们利用friend友元进行修饰,让其能够访问到我们的私有变量

public:
    Person(int a, int b) {
        this->a = a;
        this->b = b;
    }

    //void operator<<(cout) {} //在类中定义的话无法实现 cout << p这种形式到时候调用的时候只能是p.operator<<(p),简化版只能是 p << cout,所以我们只在全局区定义函数

private:
    int a;
    int b;
};

ostream & operator<<(ostream & cout,Person & p) {  // 都不需要生成一个新的内存空间,所以都进行传参引用
    cout << p.a << "," << p.b << endl;
    return cout; // 这里返回的是ostream类型 是为了进行后面 << 继续拼接的输出,链式操作
}



int main() {
    Person p1(1, 2);
    cout << p1 << "hello world " <<endl;  //通过p1 直接可以输出对象p1的成员变量
    system("pause");
    return 0;

}

学习:类和对象——运算符重载

标签:方法   tor   out   include   成员   私有变量   数据   功能   改变   

原文地址:https://www.cnblogs.com/zpchcbd/p/11865686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!