121讲重载、加号运算符重载、左移运算符重载
内容纲要

121讲重载、加号运算符重载、左移运算符重载

运算符重载

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

解决:对于内置的数据类型,编译器知道如何进行运算,那么自定义类型呢?

file

#include <iostream>   
#include "string"
using namespace std;
class Person {
public:
    int m_A;
    int m_B;

    //Person PersonAddPerson(Person& p) {
    //  Person temp;
    //  temp.m_A = this->m_A + p.m_A;
    //  temp.m_B = this->m_B + p.m_B;
    //  return temp;
    //};

    //成员函数重载“+”运算符
    Person operator+ (Person& p) { //重载”+“运算符
        Person temp;
        temp.m_A = p.m_A + this->m_A;
        temp.m_B = p.m_B + this->m_B;
        return temp;
    };
    Person operator+ (int num) {
        Person temp;
        temp.m_B = this->m_B + num;
        return temp;
    };
};
//
//Person operator+ (Person &p1,Person &p2) {
//  Person temp;
//  temp.m_A = p1.m_A + p2.m_A;
//  temp.m_B = p2.m_B + p1.m_B;
//  return temp;
//
//};

void test() {

    Person p1;
    p1.m_A = 10;
    p1.m_B = 1;

    Person p2;
    p2.m_A = 20;
    p2.m_B = 2;

    //Person p3 = p1.PersonAddPerson(p2);
    Person p3;
    p3 = p2.operator+(p1);
    p3 = p2 + p1;
    p3 = p2 + 100;
    cout << p3.m_A << endl; //由于p3 = p2 + 100;返回的对象的参数m_A没有初始化,所以这个值是乱码
    cout << p3.m_B << endl;
}
void main() {
    test();
}
  • 运算符重载 也可以发生函数重载。

​ person1 + person2; person1 + 10;

总结:

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

  2. 不要滥用运算符重载

左移运算符的重载

conclusion :重载左移运算符配合友元可以实现输出自定义数据类型

#include <iostream> 
#include "string"
using namespace std;
class Person {

public:
    std::string name;

    //成员函数重载左移运算符(不过一般不用,因为 原型: void operator<< (ostream &abc) 简化:p1 << cout;   )
    void operator<< (ostream &abc) {  //注意这里传参的值是一个ostream类。 ostream 中应该重载了<< 左移运算发作为输出运算符。底层机制我不明白。
        abc << "名字叫:" << this->name;
    }
};

//全局函数重载左移运算符。
ostream& operator<< (ostream& out, Person& p) {  //返回它自己本身,属于链式编程,可以加多个 << 
    out << "全局函数重载左移运算符 名字叫:" << p.name;
    return out;
}

void test() {
    Person p2;
    Person p1;
    p1.name = "张三";
    p1 << cout;  //成员函数重载左移运算符的输出样式。

    cout << endl;
    cout << p1 << "   张三是个法外狂徒";        //调用全局函数重载的左移运算符
}

void main() {
    test();
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇