当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(1</b>[VC/C++编程]

赞助商链接



  本文“<b>高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(1</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

构造函数、析构函数与赋值函数是每个类最基本的函数.它们太普通乃至让人简单麻痹粗心,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,别的的称为普通构造函数).关于肆意一个类A,假如不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如

A(void); // 缺省的无参数构造函数

A(const A &a); // 缺省的拷贝构造函数

~A(void); // 缺省的析构函数

A & operate =(const A &a); // 缺省的赋值函数

这不由让人迷惑,既然能自动生成函数,为什么还要程序员编写?

缘由以下:

(1)假如利用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初始化”和“排除”的机会,C++创造人Stroustrup的好意好意白费了.

(2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采取“位拷贝”而非“值拷贝”的方法来实现,假使类中含有指针变量,这两个函数注定将出错.

关于那些没有吃够苦头的C++程序员,假如他说编写构造函数、析构函数与赋值函数很简单,可以不用动头脑,表明他的熟习还对比菲薄,水平有待于提高.

本章以类String的计划与实现为例,深化阐述被很多教科书轻忽了的原理.String的构造以下:

class String

{

public:

String(const char *str = NULL); // 普通构造函数

String(const String &other); // 拷贝构造函数

~ String(void); // 析构函数

String & operate =(const String &other); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

9.1 构造函数与析构函数的发源
作为比C更先进的语言,C++供应了更好的机制来加强程序的安全性.C++编译器具有严峻的范例安全查抄功效,它几近能找出程序中全部的语法问题,这的确帮了程序员的大忙.但是程序通过了编译查抄并不表示错误已经不存在了,在“错误”的大家庭里,“语法错误”的地位只能算是小弟弟.级别高的错误普通躲藏得很深,就象狡猾的罪犯,想逮住他可不简单.

按照经验,不少难以发觉的程序错误是由于变量没有被精确初始化或排除造成的,而初始化和排除工作很简单被人忘记.Stroustrup在计划C++语言时充分考虑了这个问题并很好地予以办理:把对象的初始化工作放在构造函数中,把排除工作放在析构函数中.当对象被成立时,构造函数被自动履行.当对象灭亡时,析构函数被自动履行.这下就不用耽忧忘了对象的初始化和排除工作.

构造函数与析构函数的名字不能随便起,必须让编译器认得出才可以被自动履行.Stroustrup的命名办法既简单又公道:让构造函数、析构函数与类同名,由于析构函数的目的与构造函数的相反,就加前缀‘~’以示辨别.

除了名字外,构造函数与析构函数的另一个分外之处是没有返回值范例,这与返回值范例为void的函数差别.构造函数与析构函数的使命十清楚确,就象诞生与死亡,光溜溜地来光溜溜地去.假如它们有返回值范例,那么编译器将不知所措.为了避免节外生枝,干脆规定没有返回值范例.(以上典故参考了文献[Eekel, p55-p56])


  以上是“<b>高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(1</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .