心得关于深浅拷贝,模拟实现list--operator++后置(自用)

【C++ 深拷贝与浅拷贝详解】_c++深拷贝和浅拷贝-CSDN博客

可以看看上面作者

什么是浅拷贝

浅拷贝是一种对象复制方式,其中只复制对象的成员变量值,而不复制它们所指向的资源。这意味着多个对象可能会共享相同的资源,包括动态分配的内存、文件句柄等。浅拷贝通常通过默认的拷贝构造函数和拷贝赋值运算符来实现

关于在实现list模拟过程中关于operator++的重载(后置)有些问题记录下希望可以帮助大家

	iterator operator++(int)
		{
			iterator tmp(*this);

			_node = _node->next;
			return tmp;
		}

这是关于list__iterator 中的重载++这里的tmp是浅拷贝因为这个类并没有写拷贝构造就会自动调用默认的拷贝构造就是浅拷贝,tmp和*this的默认拷贝构造是将*this中的成员赋值给tmp中的成员的,因为他们的成员变量是_node是指针所以才是的指向同一块空间,不是说tmp和*this是同一块内存,然后我将*this的成员_node(它本来是和tmp指向同一个空间)指向下一个结点的地址,和tmp中的_node不冲突

下面是重载运算符++和--的Complex类的实现代码: ```c++ #include <iostream> using namespace std; class Complex { private: double real, imag; public: Complex(double r = 0, double i = 0) : real(r), imag(i) {} Complex& operator++(); // 前置++ Complex operator++(int); // 后置++ Complex& operator--(); // 前置-- Complex operator--(int); // 后置-- void show() const { cout << "(" << real << ", " << imag << ")" << endl; } }; Complex& Complex::operator++() { real++; return *this; } Complex Complex::operator++(int) { Complex temp(*this); real++; return temp; } Complex& Complex::operator--() { real--; return *this; } Complex Complex::operator--(int) { Complex temp(*this); real--; return temp; } int main() { Complex a(1, 2); (++a).show(); // 输出:(2, 2) a.show(); // 输出:(2, 2) (a++).show(); // 输出:(2, 2) a.show(); // 输出:(3, 2) (--a).show(); // 输出:(2, 2) a.show(); // 输出:(2, 2) (a--).show(); // 输出:(2, 2) a.show(); // 输出:(1, 2) (a--).show(); // 输出:(1, 2) a.show(); // 输出:(0, 2) return 0; } ``` 在上面的代码中,我们为Complex类重载了运算符++和--,包括前置++后置++、前置--和后置--。对于前置++和前置--,我们直接修改实部real的值,并返回*this的引用;对于后置++后置--,我们先用*this的值初始化一个临时对象temp,然后再修改实部real的值,并返回这个临时对象temp,从而实现后置++后置--。在主程序中,我们对Complex对象a进行了多次++和--运算,并输出了运算结果,验证了运算符的正确性。注意,由于后置++后置--返回的是临时对象,因此如果直接调用a--.show(),则不能正确输出a--的结果,必须使用(a--).show()的形式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值