码迷,mamicode.com
首页 > 编程语言 > 详细

C++继承细节 -2

时间:2018-05-28 18:28:30      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:amp   strlen   深拷贝   复制构造   style   class   成员   赋值运算符   函数   

  • 继承与动态内存分配

    //基类定义
    class BaseClass {
       private:
        char *label;
       public:
        BaseClass() {}
        BaseClass(const char *l);
        virtual ~BaseClass();
        BaseClass(const BaseClass &bc);
        BaseClass &operator=(const BaseClass &bc);
    };
    BaseClass::BaseClass(const BaseClass &bc)
    {
    this->label = new char[std::strlen(bc.label)+1];
    std::strcpy(this->label, bc.label);
    }
    BaseClass &BaseClass::operator=(const BaseClass &bc)
    {
    this->label = new char[std::strlen(bc.label)+1];
    std::strcpy(this->label, bc.label);
    }
    BaseClass::~BaseClass()
    {
    delete[] this->label;
    }
    1. 派生类中的数据成员没用new分配内存,则不需要为派生类提供 复制构造函数赋值运算符;因为在使用已知对象对另一个对象初始化时派生类的默认复制函数将调用基类的显示复制函数(BaseClass(const BaseClass &bc))进行深拷贝,同理赋值运算符也一样。

      //派生类定义
      class DerivedClass : public BaseClass {
      private:
      char style[20]; //使用栈空间
      public:
      DerivedClass() {}
      DerivedClass(const char *st);
      };
    2. 派生类中的数据成员使用new分配内存,则派生类需要提供 复制构造函数赋值运算符,具体实现如下:

      //派生类
      class DerivedClass : public BaseClass {
      private:
      char *style;
      public:
      DerivedClass() {}
      DerivedClass(const char *st);
      ~DerivedClass() {delete[] this->style;}
      DerivedClass(const DerivedClass &dc);
      DerivedClass &operator=(const DerivedClas &dc);
      };
      //显示复制构造函数
      DerivedClass::DerivedClass(const DerivedClass &dc) : BaseClass(dc)
      {
      this->style = new char[std::strlen(dc.style)+1];
      std::strcpy(this->style, dc.style);
      }
      //赋值运算符
      DerivedClass & DerivedClass::operator=(const DerivedClass &dc)
      {
      if (this == &dc) {
      return *this;
      }
      delete[] this->style;
      //注意,注意,注意
      BaseClass::operator=(dc); //显示调用基类赋值运算符函数
      this->style = new char[std::strlen(dc.style)+1];
      std::strcpy(this->style, dc.style);
      return *this;
      }

C++继承细节 -2

标签:amp   strlen   深拷贝   复制构造   style   class   成员   赋值运算符   函数   

原文地址:https://www.cnblogs.com/Focus-Flying/p/9101508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!