zoukankan      html  css  js  c++  java
  • EffectiveC++ Item12

    看来如果类比较复杂,自己写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;
    }
    

      

  • 相关阅读:
    虚拟主机支持apk
    pc显示,手机隐藏
    manjaro个人配置
    docker-compose部署elk
    docker-compose部署zk和kafka
    docker-compose部署redis-cluster
    ActiveMQ与RocketMQ对比
    dropbox离线安装包--需FQ
    C++实现中缀表达式转前、后缀
    运算符优先级
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2731759.html
Copyright © 2011-2022 走看看