C++ 学习(继承和动态内存分配)

原创 2015年11月21日 14:33:43

1> 派生类不使用new

class baseDMA{
  private:
  char * label;
  int rating;
  public:
   baseDMA(const char *l = "null", int r = 0);
   baseDMA(const baseDMA & rs);
   virtual ~baseDMA();
   baseDMA & operator = (const baseDMA & rs);
   ...
}

class lacksDMA : public baseDMA
{
  private : 
   char color[40];
  public:
  .... 
}

不需为派生类定义显示的复制构造,析构,赋值符号等从操作
派生类的默认构造函数,编译器将自定义默认的构造函数要进行一些操作: 执行之自身的代码后调用基类 的析构函数。

1> 派生类不使用new

class baseDMA{
  private:
  char * label;
  int rating;
  public:
   baseDMA(const char *l = "null", int r = 0);
   baseDMA(const baseDMA & rs);
   virtual ~baseDMA();
   baseDMA & operator = (const baseDMA & rs);
   ...
}

class hashDMA : public baseDMA
{
  private : 
   char *style;
  public:
  .... 
}

在这种情况下必须使用派生类显示析构函数,复制构造函数和复制操作等

派生类析构函数自动调用基的析构函数,所以自身的指责是对派生类构造函数执行工作的清理。所以hasDMA析构函数必须释放style管理的内存,应依赖于baseDMA的析构函数来释放lable管理的内存。

所以

baseDMA :: ~baseDMA(){ delete [] lable;}
hasDMA :: ~hasDMA(){delete [] style;}

hasDMA的复制构造函数只能访问hasDMA的数据。它必须调用baseDMA复制构造函数来共同处理

C++之继承和动态内存分配

C++之继承和动态内存分配
  • sunfei2
  • sunfei2
  • 2014年04月04日 20:07
  • 595

C++继承关系中的动态内存分配

假设基类使用动态内存分配,并重新定义了赋值和复制构造函数 class class_a { private: char* a; int rating; public: cl...
  • KingCat666
  • KingCat666
  • 2015年04月07日 21:31
  • 717

c++动态内存分配

用new 运算符实现动态内存分配 OP1: P = new T; T是任意类型名,P是类型为T * 的指针。 动态分配出一片大小为 sizeof(T)字节的内存空间,并且将该 内存空间的起始地址赋...
  • p641290710
  • p641290710
  • 2014年06月03日 21:41
  • 683

C++的学习心得

C++总结 小第早早就总结了 现在开个博客上传一下下
  • aap159951
  • aap159951
  • 2015年09月23日 17:55
  • 339

C/C++动态分配与释放内存的区别详细解析

转自http://www.jb51.net/article/41723.htm 1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 ...
  • a573233077
  • a573233077
  • 2016年01月14日 16:59
  • 3536

一篇关于学C++的感想(拿来与大家分享)

学计算机的如果你有耐心看下去,我敢保证这绝对是一种收获 期待爱 大师提醒: 计算机专业不是学编程,而是懂得计算机的工作原理,以及和计算机相关的学科技术。一个高手不必懂得编程,coder是最底层的人物...
  • u013255737
  • u013255737
  • 2013年12月28日 14:24
  • 1695

【面向对象】类和动态内存分配

类和动态内存分配 编译器生成的函数
  • wupenm
  • wupenm
  • 2015年09月02日 19:17
  • 1279

【c++知识归纳】继承与多态(一)

c++是基于面向对象的编程语言,面向对象的三大特性为:封装、继承和多态。本文将我对继承与多态的理解进行了总结归纳,这部分内容对于学习c++编程语言是非常重要的,文章加入我的个人理解,希望能给大家带来帮...
  • XHfight
  • XHfight
  • 2016年08月24日 02:45
  • 1422

继承和动态内存分配

首先,假设基类使用了动态内存分配
  • erpng
  • erpng
  • 2014年06月20日 09:38
  • 414

(一四二)继承和动态内存分配

当基类、派生类用,或者不用动态内存时,共有四种情况: (注意,前提是基类的动态内存分配相关函数符合常规使用动态内存的要求)   情况一:基类 使用 动态内存分配、派生类新增数据成员 不使用 ...
  • qq20004604
  • qq20004604
  • 2016年02月04日 02:40
  • 460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 学习(继承和动态内存分配)
举报原因:
原因补充:

(最多只允许输入30个字)