c++重载++ 中右++的一些问题

#include
using namespace std;

class Clock
{
int hour, minute, seconds;
public:
Clock(int hour, int minute, int seconds):hour(hour), minute(minute), seconds(seconds) {}

void ShowTime()
{
    cout<<hour<<":"<<minute<<":"<<seconds<<endl;
}
Clock& operator++()
{
    if(++seconds == 60)
        seconds = 0, ++minute;
    if(minute == 60)
        minute=0,  ++hour;
    if(hour == 24)
        hour = 0;
    return *this;
}
Clock operator++(int)
{
    Clock c = *this;
    ++(*this);  
    return c;
}

};
int main()
{
Clock myClock(23, 59, 58);
cout << "output:" << endl;
myClock.ShowTime();//23:59:58
myClock++;

myClock.ShowTime();//23:59:59
++myClock;
myClock.ShowTime();//0:0:0
(myClock++).ShowTime();//0:0:0
(++myClock).ShowTime();//0:0:2
}
第一个myClock++显示输出秒加1是不是因为Clock c = *this; 类似浅拷贝啊
(myClock++).ShowTime(); 输出秒为0 这为什么啊?? 求解决
谢谢

没问题啊,myClock++返回的是++之前的clock,这么设计才符合约定。
从代码上看,Clock c = *this;这里C++编译器会先调用拷贝构造函数返回一个新的myClock,再++

为了让你看到这一点,你可以看下面的代码:

#include <iostream>
using namespace std;

class Clock
{
int hour, minute, seconds;
public:
Clock(int hour, int minute, int seconds):hour(hour), minute(minute), seconds(seconds) {}
Clock(Clock &c) //加上
{
    hour = 1;
    minute = 2;
    seconds = 3;
}
void ShowTime()
{
    cout<<hour<<":"<<minute<<":"<<seconds<<endl;
}
Clock& operator++()
{
    if(++seconds == 60)
        seconds = 0, ++minute;
    if(minute == 60)
        minute=0,  ++hour;
    if(hour == 24)
        hour = 0;
    return *this;
}
Clock operator++(int)
{
    Clock c = *this;
    ++(*this);  
    return c;
}
};
int main()
{
Clock myClock(23, 59, 58);
cout << "output:" << endl;
myClock.ShowTime();//23:59:58
myClock++;

myClock.ShowTime();//23:59:59
++myClock;
myClock.ShowTime();//0:0:0
(myClock++).ShowTime();//0:0:0 //这里输出了1:2:3,说明拷贝构造函数调用了
(++myClock).ShowTime();//0:0:2
}

图片说明

因此是不是“浅拷贝”完全取决于你怎么写这个拷贝构造函数。你完全可以在里面加上深拷贝的逻辑。
甚至像我那样,返回一个别的什么

如果问题得到解决,麻烦点下我回答右边的采纳,谢谢

前++先加再用,后++先用后加
后++也就是你说的右++,先是myClock.showTime(),然后才myClock++

看下面注释

 Clock operator++(int)      //这里是重载后++
    {
        Clock c = *this;        //先拷贝自增前的状态
        ++(*this);              //调用前++
        return c;               //这里实际上得到自增前的对象
    }