c++重载后置自加运算符实例说明

 代码如下 复制代码

#include <iostream>
using namespace std;
class num
{
public:
int x;
num(){n=1;cout<<”构造函数执行!n”;}
num(int i){n=i;cout<<”带参数的构造函数执行!n”;}
num(const num&s){this->n=s.n;cout<<”复制构造函数执行!n”;}
~num(){cout<<”析构函数执行!n”;}
int get()const{return n;}
void set(int x){n=x;}
void add(){++n;}//定义自加函数错误: expected ‘;’ before ‘:’ toke
const num &operator ++(){//前置自加,const关键是防止返回后再自加,也就是避免++++之类的出现, 引用‘&’的使用为了避免复制构造函数的调用,operator是c++关键字函数名,与普通重载数相同,c++已定义运算符的类型,其后的++表示重载的是自加运算符,{}里面的是实现部分
++n;

return *this;//*shis为原始对象
}

const num operator ++(int o){//后置自加,参数o的作用只是作为与上面的函数区别,const关键是防止返回后再自加,也就是避免++++之类的出现, 引用‘&’的使用为了避免复制构造函数的调用,operator是c++关键字函数名,与普通重载数相同,c++已定义运算符的类型,其后的++表示重载的是自加运算符,{}里面的是实现部分
num tem(*this);
this->n++;//this->可以省略
return tem;

}
private:
int n;
};
int main()
{
num i;
//i.add();//调用成员函数实现自加
num y=i++;//后置自加
cout<<”i:”<<i.get()<<endl;//后置自加后i的成员值
cout<<”y:”<<y.get()<<endl;//后置自加后y的成员值
//y++;这是错的因为i是对象,并没有自加运算
return 0;
}

时间: 2024-09-21 00:43:05

c++重载后置自加运算符实例说明的相关文章

c++-重载运算符C++后置++在屏幕上的显示规则

问题描述 重载运算符C++后置++在屏幕上的显示规则 c++运算符重载后置++在屏幕上如何显示?结果为什么该加一,却没有显示出来,还是原数.在写一段前置++代码,屏幕上则显示原数字多加了2. 有代码如下: c=a++; cout<<c=a++,c=",c.display; c=++a; cout<<"c=++a,c=",c.display; ............ a=(100,200),b=(10,20) 则显示结果如下: c=a++,c=(100

关于C++后置运算符重载一个超简单问题

问题描述 关于C++后置运算符重载一个超简单问题 以下代码 #include using namespace std; class num { public: num(){n=1;cout<<"构造函数执行 ";} num(int i){n=i;cout<<"带一个参数的构造函数执行 ";} num(const num&s){this->n=s.n;cout<<"复制构造函数执行 ";} ~num

前置++和后置++ 运算的详解及实例代码_java

一般认为前置++是先将变量的值加1,然后使用加1后的值参与运算:而后置++是先使用该值参与运算,然后再将该值加1. 先看第一个例子: package test; public class Plus_Test01 { public static void main(String[] args) { int i = 100; i = i++; System.out.println(i); } } 猜猜结果是什么? 接着看第二个: package test; public class Plus_Tes

重载 操作符 c++-c++重载问题:我在运行后发现重载的后置--操作符没起到应有的作用,求解。

问题描述 c++重载问题:我在运行后发现重载的后置--操作符没起到应有的作用,求解. #include using namespace std; class complex { double real,imag; public: complex(double r=0,double i=0) { real=r; imag=i; } const complex operator--(int) { complex temp(*this); --(*this); return temp; } const

thinkPHP分组后模板无法加载问题解决方法_php实例

本文分析了thinkPHP分组后模板无法加载问题解决方法.分享给大家供大家参考,具体如下: 一个分组简要的目录结构如下图所示: 默认分组配置为Home.当访问localhost/server/时可以正常访问前台,localhost/server/home/Index/index也能正常访问. 但是,localhost/server/admin却不能加载tpl页面,但是能够访问到控制器(localhost/server/admin/Index/index能访问,display不出页面). 解决:

c# 运算符在A类中重载后,怎样影响到B类中的运算符

问题描述 c#运算符在A类中重载后,怎样影响到B类中的运算符 解决方案 解决方案二:影响不了,运算符重载只能由类的定义者实现.解决方案三:B类从A类中派生~解决方案四:BclassBaseAclasspublicclassBclass{}publicclassAclass:B{publicstaticAoperator+(Bx,By){//TD:OO你的代码在这里}}

前置++/--和后置++/--

对此一直理解不深,今日偶然之间发现自己根本没有理解他们.今天我发现: cout<<a++<<endl; cout<<++a<<endl;的值不同,a++返回的是原值,++a返回的是递加后的值.我不禁冒了冷汗,写了这么多代码,居然会不明白这么简单的东西,还好之前代码没有出现问题.我为此懊恼不已.细节往往是最重要的,诚然如此啊. 带着一个问题:为什么要分前置和后置?大家都知道前置比后置要效率高,难道就只是为了效率而存在,显然不会,如果这样,后置就没有存在的任何理

《Imperfect C++中文版》——1.3 运行期契约:前置条件、后置条件和不变式

1.3 运行期契约:前置条件.后置条件和不变式 Imperfect C++中文版 "如果例程的所有前置条件(precondition)已经被调用者满足了,那么该例程必须确保当它完成时所有后置条件(postconditions)(以及任何不变式)皆为真."--Hunt and Thomas, The Pragmatic Programmers [Hunt2000]. 如果我们无法执行编译期强制,那么还可以采用运行期强制.运行期强制的一个系统化的实现途径是指定函数契约.函数契约精确定义了在

Spring AOP中的前置通知和后置通知详解

不同版本的spring对AOP的支持有所不同,spring2.0之前,它主要针对不同类型的拦截器使用XML配置文件通过代理来实现.而spring2.0之后,它可以使用JDK5的注解来完成AOP的实现,只是几个简单标签就可以完成,使得开发更加简单,便捷.所以推荐使用后一种方法.但是很多旧的项目中使用了前一种实现方法,所以我们也应该对第一种方法有所掌握. 首先通过代码介绍spring2.0之前如何实现前后置通知 定义一个User接口: package org.spring.advice; publi