zoukankan      html  css  js  c++  java
  • c++ 拷贝构造函数 继承

    拷贝构造函数要求把所有变量都需要做拷贝。在有继承关系情况先,子类的拷贝构造函数,需要调用父类拷贝构造函数。示例代码如下:

    class Base{
    public:
        virtual ~Base();
        Base(const char *pStr);
        Base(const Base &other);
        virtual void CallFunction() ;
    public:
        char *m_pBase;
    };
    
    Base::Base(const char *pStr){
        if (pStr) {
            long iLen = strlen(pStr)+1;
            m_pBase = new char[iLen];
            memset(m_pBase, 0, iLen);
            strcpy(m_pBase, pStr);
        }}
    
    Base::~Base(){
        if (m_pBase) {
            delete [] m_pBase;
            m_pBase = NULL;
        }
    }
    
    Base::Base(const Base &other){
        if (m_pBase) {
            delete m_pBase;
            m_pBase = NULL;
        }
        long iLen = strlen(other.m_pBase)+1;
        m_pBase = new char[iLen];
        memset(m_pBase, 0, iLen);
        strcpy(m_pBase, other.m_pBase);
    }
    class Child:public Base{
    public:
        ~Child();
        Child(const char *pStr , const char *pBase);
        Child(const Child &other);
    public:
        char *m_pChild;
    };
    
    Child::Child(const char *pStr , const char *pBase):Base(pBase){//初始化列表中调父类构造函数
        if (pStr) {
            long iLen = strlen(pStr)+1;
            m_pChild = new char[iLen];
            memset(m_pChild, 0, iLen);
            strcpy(m_pChild, pStr);
        }
    }
    
    Child::Child(const Child &other):Base(other){//调父类拷贝构造函数
        if (m_pChild) {
            delete m_pChild;
            m_pChild = NULL;
        }
        long iLen = strlen(other.m_pChild)+1;
        m_pChild = new char[iLen];
        memset(m_pChild, 0, iLen);
        strcpy(m_pChild, other.m_pChild);
    }
    
    
    Child::~Child(){
        if (m_pChild) {
            delete [] m_pChild;
            m_pChild = NULL;
        }
    }

    Test:

    Child ch("child", "base");

     Child ch2(ch);

      

  • 相关阅读:
    安卓组件service
    安卓组件-BroadcastReceiver
    【bug】java.lang.NoSuchMethodError: android.widget.TextView.setBackground
    【转】安卓毛玻璃效果
    INSTALL_FAILED_UPDATE_INCOMPATIBLE
    安卓 异步线程更新Ui
    OC语言-03-OC语言-三大特性
    OC语言-02-OC语言-基础知识
    OC语言-01-面向过程与面向对象思想
    C语言-07-预处理、typedef、static和extern
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3831320.html
Copyright © 2011-2022 走看看