#include <iostream>using namespace std;#include<string>#include<cmath>class Clock {public: Clock(int hour = 0, int minutes = 0, int second = 0) :hour(hour), minutes(minutes), second(second) {}; Clock& operator ++(); Clock operator ++(int); void print() { cout << hour << " " << minutes << " " << second << " "; }public: int hour, minutes, second;};Clock &Clock ::operator++() { second++; if (second >= 60) { minutes++; second = second - 60; } if (minutes >= 60) { hour = (hour + 1) % 24; minutes = minutes - 60; } return *this;}Clock Clock:: operator ++(int) { Clock c = *this; ++(*this); return c;}int main() { Clock cc(23, 59, 59); (cc++).print();}
Clock c=*this是深拷贝,不是浅拷贝
如果改成Clock *c=this才是浅拷贝,运行结果如下
第一种情况下Clock c=*this,c是Clock类变量,*this传的是this指针指向的地址空间里存放的值,是深拷贝,*this变化不影响c
第二种情况下Clock*c=this,c是指向Clock类变量的指针,等于把this指向的地址赋给了c,二者公用地址空间,是浅拷贝,*this变化影响c