拓冰建站拓冰建站
首页 / 资讯中心 / 正文

详解C++中递增运算符重载的实现

递增运算符形如a、a。如果a初始值为1那么a结果为1但是实际上a等于2先读取再加1a结果为2实际也是2。这是对于基本运算类型那么递增运算符重载的目的就是对于对象的属性也可以直接进行前置递增和后置递增。由于成员函数里重载写的内容少就详细分析成员函数实现递增运算符重载递增运算符重载的实现类结构如下12345678910classAddoperator{private:int_Num;public:Addoperator(intm){_Num m;}};我的目的是直接输出类对象属性 A即coutAendl;那么就需要先对左移运算符重载左移运算符重载示例12345678//先对左移运算符重载ostream operator(ostream cout, Addoperator A){cout A._Num;returncout;}//需要在类第一行加上友元friendostream operator(ostream cout, Addoperator A);左移运算符重载在上篇博客以及详细介绍了不理解的朋友可以去翻阅一下由于_Num是私有属性 所以要在类内加上重载左移运算符函数是类友元的声明。前置递增运算符重载示例12345Addoperator operator(){_Num;return*this;}函数名还是采取编译器提供的规范名operator ,返回值类型为类引用这是链式调用的形式这样可以实现多次的前置递增运算例如(A)由于是在成员函数这里不需要参数直接进行属性的递增返回值是*this前面讲到过this是指向成员属性的指针this可以调用对象的属性那么*this就是对象本身通过返回其引用可以链式调用重载的前置递增运算符示例123456voidtest01(){Addoperator A(1);cout ((A)) endl;cout A endl;}运行效果注意事项1a1、采用成员函数方法实现前置递增运算符重载不需要参数2、通过返回对象的引用可以链式调用非常方便后置递增运算符重载示例123456Addoperator operator(int){Addoperator temp *this;_Num;returntemp;}函数名也采用编译器提供的标准递增运算符但是参数这里加了个int这是函数进阶里提到的占位参数可以只写一个数据类型放这儿可以进行函数重载很明显前置和后置递增重载的函数名相同肯定需要进行函数重载的而编译器就默认加上占位参数后为后置递增运算由于后置递增是先读数据后操作那么我就先创建一个对象来记录当前_Num的属性然后进行递增最后返回记录的对象属性即可调用1234567voidtest02(){Addoperator B(0);cout B endl;cout B endl;cout B endl;}运行效果注意事项b1、虽然同时递增运算符重载后置递增的运算却无法多次调用不能链式调用因为我们返回的引用是局部对象的引用一旦返回该对象地址就会被编译器清理再调用的地址就会是新建的因此这里最好不返回引用直接返回值就行了去掉符号。2、后置的递增运算符重载需要传入一个占位参数用来进行函数重载此外函数重载和函数的返回值类型无关就算去掉也会进行函数重载。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门