首先是完整代码
/* * @Author: Stylle * @Date: 2020-08-20 21:05:50 * @LastEditors: Stylle * @LastEditTime: 2020-08-20 22:47:24 * @FilePath: \undefinedc:\Users\23999\Desktop\text01.cpp */ #include <iostream> using namespace std; class TextClass { public: //p 友元函数 friend ostream &operator<<(ostream &out, TextClass MyTextClass); public: //公共权限 //p 构造函数 TextClass(int num) { this->nNum = num; } //p 重构 前 置++运算符:类变量前面 TextClass &operator++() { this->nNum++; return *this; } //p 重构 后 置++运算符:类变量后面 TextClass operator++(int) { TextClass temp(this->nNum); this->nNum++; return temp; } //p 重构 前 置--运算符:类变量前面 TextClass &operator--() { this->nNum--; return *this; } //p 重构 后 置--运算符:类变量后面 TextClass operator--(int) { TextClass temp(this->nNum); this->nNum--; return temp; } protected: //保护权限 private: //私有权限 int nNum; }; //p 重构<<运算符 ostream &operator<<(ostream &out, TextClass MyTextClass) { out << MyTextClass.nNum; return out; } int main(int argc, char **argv) { TextClass tc01(100); cout << "前置自加:" << ++tc01 << endl; cout << "后置自加:" << tc01++ << endl; cout << "后置自加运算后:" << tc01 << endl; cout << "前置自减:" << --tc01 << endl; cout << "后置自减:" << tc01-- << endl; cout << "后置自减运算后:" << tc01 << endl; return 0; }
<<运算符的重载:在类外实现类运算符重载,过程中需要操作class类中的保护权限成员和私有权限成员必须要加上friend友元
friend ostream &operator<<(ostream &out, TextClass MyTextClass);
ostream &operator<<(ostream &out, TextClass MyTextClass) { out << MyTextClass.nNum; return out; //为了实现多次<<输出就必须返回引用 }
前置自加运算符重载:前置自加是参与运算的时候数值已经发生改变所以这里返回的是this的引用
TextClass &operator++() { this->nNum++; return *this; }
后置自加运算符重载:后置自加是参与预算过后再将this的数值发生改变所以这里用一个temp保存上一步的数值返回,这里的int参数是为了区分前面前置和后置的重载运算符函数的区别,无具体含义
TextClass operator++(int) { TextClass temp(this->nNum); this->nNum++; return temp; }
自减运算符的重载和自加运算符的重载方式是一样的只是++变成–