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);

      

  • 相关阅读:
    Bat脚本处理ftp超强案例解说
    struts2中的输入校验
    struts国际化
    Spring2.5+Hibernate3.3的集成
    SQL Server如果视图存在就删除
    struts2自定义拦截器
    struts2标签
    spring2.5的第一个简单应用的学习
    基于XML配置方式实现对action的所有方法进行校验
    DataGridViewCell 类
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3831320.html
Copyright © 2011-2022 走看看