四析构函数 destructor五赋值运算符函数operator =六成员.ppt

四析构函数 destructor五赋值运算符函数operator =六成员.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
四、析构函数 (destructor) 五、赋值运算符函数operator = 六、成员函数重载 七、缺省参量的成员函数 八、编译器默默提供的成员函数 四、析构函数(destructor) 析构函数是类中的特殊成员函数。析构函数与构造函数 的作用相反,构造函数在对象的定义点由编译器自动调用, 析构函数则是在对象生存期结束时自动执行的成员函数。 析构函数的语法格式是在无参构造函数的构造函数名前 加以一个波浪符~也即按位求反运算符,由此形成特殊的析 构函数名,表示“反构造函数”。 若没有提交析构函数,编译器暗中生成一个公共的缺省 析构函数,它是空函数。 析构函数在类中的声明和定义格式为: ~CType(); 析构函数名(); ~类名(); //声明格式 CType::~CType () 类名::~类名() //定义格式 { { 析构函数语句序列; //语句为空时对应缺省的析构函数 } } 上面析构函数的定义放置在实现文件中,放在类的声明 中时写为: ~CType(){ 语句序列;} ~类名(){ 语句序列;} 构造、析构函数和赋值运算符函数都不参入继承机制。 下面是析构函数的特殊之处: 1). 析构函数是唯一的,既没有入口参数也无返回类型, 因此不能重载。 2). 析构函数不能继承但可以是虚函数。 3). 析构函数体中不能使用return语句返回值。 4). new运算符定义的对象,delete运算符清除时导致 析构函数的隐含调用。 new运算符定义对象时new运算符先申请内存然后调用 构造函数。 由delete清除new运算符定义的对象时,则是先调用析 构函数,然后再收回原来由new运算符为对象分配的内存。 new CType[n]运算分配内存大小是n*sizeof(CType), 并不包含其成员指针其后所间接在构造函数中进一步获得的 内存,这片内存应由析构函数先行释放。 new CType[n]运算符与delete [ ]匹配,new CType运 算符与delete 匹配,其余的搭配都是不稳健的,应避免。 匹配关系为[CType *pk=new CType[2];..;delete [ ] pk;] 与 [CType *p=new CType;...;delete p;]。 delete运算符隐含调用析构函数时,在调用点相应的析 构函数应是可访问的。 [例] 对象定义与析构函数 #include stdio.h static int numc=0; class CType { public: CType (int=3 ); ~CType(); private: long * m_p ; int m_n; }; CType::CType (int n) { m_n = n; printf (%d, CType (); ++%d\n, m_n, ++numc); m_p = new long [m_n]; } CType::~CType () { printf (%d, ~CType (); %d--; , m_n, numc- - ); delete [ ] m_p; } CType g (1); CType *q = new CType (9); void main () //因此相应的析构函数未被调用 { printf (Enter into main() {\n); CType d (2); CType *pk= new CType [2]; delete [ ]

文档评论(0)

187****5045 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档