EffectiveC++ Item12

来源:互联网 发布:淘宝网儿童棉服 编辑:程序博客网 时间:2024/04/30 10:15

看来如果类比较复杂,自己写copying fun还是比较麻烦的事情:

#include <iostream>#include<string>using namespace std;class Widget{public:Widget(int aData):m_Data(aData){}virtual void Swap(Widget &aRhs){int lTemp = aRhs.m_Data;aRhs.SetData(m_Data);m_Data = lTemp;}Widget& operator=(const Widget &aRhs){Widget lTemp(aRhs);Swap(lTemp);return *this;}virtual int GetData() const{return m_Data;}virtual void SetData(int aData){m_Data = aData;}private:int m_Data;};class Drived: public Widget{public:Drived(int aData):Widget(0),m_DriveData(aData){}void Swap(Drived &aRhs){Widget::Swap(aRhs);int lTemp = aRhs.m_DriveData;aRhs.SetData(m_DriveData);m_DriveData = lTemp;}Drived(const Drived &aDrived):Widget(aDrived),m_DriveData(aDrived.m_DriveData){}Drived& operator=(const Drived &aRhs){Drived lDrived(aRhs);Widget::operator=(lDrived);Swap(lDrived);return *this;}virtual int GetData() const{return m_DriveData;}virtual void SetData(int aData){m_DriveData = aData;}private:int m_DriveData;};int main(){Widget lTest1(10);Widget lTest2(-10);lTest2 = lTest1;cout << lTest2.GetData() << endl;Drived lDrived1(20);Drived lDrived2(-20);lDrived1 = lDrived2;cout << lDrived2.GetData() << endl;}