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

      

  • 相关阅读:
    C++类型转换(字符串)
    GDI+ 中Image::FromStream ,用流的方式显示图像
    mfc对话框序列化实例
    配置android开发环境eclipse获取ADT获取不到(转)
    vs开发错误总结
    MFC获取文件操作
    Android系统架构剖析(转)
    OpenCV 图像采样 插值 几何变换
    C++ char*,char[],string,CString转换
    Simscape Multibody 教程 —— 入门学习
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3831320.html
Copyright © 2011-2022 走看看