重载 操作符 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 complex operator--()
{

       --real;--imag;
       return *this;
}

void display();

};

void complex::display()
{
if(imag>=0)
{
cout<<"("<<real<<"+"<<imag<<"i)"<<endl;
}
else
cout<<"("<<real<<imag<<"i)"<<endl;
}

int main()
{
complex c1(1,1);
cout<<"c1=";c1.display();

--c1;
cout<<"--c1,c1=";c1.display();
c1--;
cout<<"c1--,c1=";c1.display();

return 0;

}
运行结果:
c1=(1+1i)
--c1,c1=(0+0i)
c1--,c1=(-1-1i)

我预想的结果应该是c1--,c1=(0+0i),不知道错在哪里?求解

时间: 2024-09-17 04:04:41

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

函数重载-运行一个包含重载函数的c++程序,报出如下错误是什么原因??

问题描述 运行一个包含重载函数的c++程序,报出如下错误是什么原因?? 源码如下: #include "stdafx.h" #include using namespace std; unsigned long left(unsigned long num, unsigned ct); char * left(const char * str, int n = 1); int main(int argc, char* argv[]) { char * trip = "Hawa

STL——前闭后开区间表示法和function call 操作符

前开后闭开区间表示法[) 任何一个STL算法,都需要获得由一对迭代器(泛型指针)所标示的区间,用以表示操作范围,这一对迭代器所标示的是个所谓的前闭后开区间,以[first,last)表示,也就是说,整个实际范围从first开始,直到last-1.迭代器last所指的是"最后一个元素的下一位置".这种off by one(偏移一格,或说pass the end)的标示法,带来了很多方便,例如下面两个STL算法的循环设计,就显得干净利落: template<class InputIt

linux中udev控制磁盘引导顺序配置

vmware EXSi 虚拟化组的兄弟在对一台虚拟机主新增了N块磁盘后,重启后发现主机引导后分区的顺序发生了变化,导致各个挂载点下挂载的文件和之前不一致了.当时给出的解决方法是在/etc/fstab文件中使用uuid,因为UUID不会变化. 一.uuid 与挂载点 1.使用blkid命令获取UUID  代码如下 复制代码 [root@361way ~]# blkid /dev/sda1: SEC_TYPE="msdos" UUID="F159-EA55" TYPE=

MFC 多线程及线程同步

一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等.用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等.但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务. 在MFC中,一般用全局函数Afx

用MFC实现WebGUI--(CDHtmlDialog)

自从去年年底一次棘手的界面,开始研究用web做界面到现在大约1年,这一年间不是局限在实现层面,也并非一直研究这一个问题,有很多问题其实不是问题,只是自己没有想清楚或者思想没放开.对于一个界面开发人员,想必拉的对话框不少于100个,腻味不必说,光是对话框大小改变导致控件跟着变化都需要一番功夫,加上界面美观,界面的风格统一,界面的灵活多变......,头痛.在对话框里面加载位图,加载gif,超链接......,啊,没法控制了吧!在考虑远点,现在.net3.0技术已经完全打破应用和桌面的界限,我们的界

java,麻烦详细告诉为什么结果是&amp;#039;B and A&amp;#039;, 而不是‘B and B’ ?????????

问题描述 public class Cons {public static void main(String[] args) {A a1 = new A();A a2 = new B();B b = new B();C c = new C();D d = new D();System.out.println(a2.show(b)); // ????????????}}class A {public String show(D obj) {return ("A and D");}publ

java class生成jar包(转)

  进入dos操作符窗口cd进入要打成jar包的class文件所有文件夹目录jar cvf [生成jar的名称.jar] [列出class文件] //若有多个,以空隔隔开 如:一.操作零散的单个或几个class文件jar cvf ibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class 二.把一个文件夹下面的所有class文件打成jar包jar cvf ibstool.jar * 回车 生成可执行jar包:编译的class文件中必须有ma

linux shell 字符串操作(长度,查找,替换)详解_linux shell

在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那

shell 字符串操作(长度,查找,替换)详解_linux shell

复制代码 代码如下: 工作中字符串操作举例 filename='/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg' #下面是使用shell字符串操作 buName1=${filename#*/jobs/} #去除'/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg'前缀得到'CnClickstat/DFSLoader/loader.cfg' buName1=${buName1%%/*} #去除'Cn