Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75674
  • 博文数量: 35
  • 博客积分: 1640
  • 博客等级: 上尉
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-05 11:44
文章分类

全部博文(35)

文章存档

2011年(1)

2008年(34)

我的朋友
最近访客

分类: C/C++

2008-05-05 13:11:02

构造函数和析构函数
构造函数
构造函数在对象被创建的时候由系统自动调用
构造函数没有返回值。
如果没有定义构造函数,编译系统会在编译时自动生成一个默认形式的构造函数,这个构造函数的功能是不做任何事。因为在建立对象时自动调用构造函数是C++程序“例行公事”的必然性为。
作为类的成员函数,构造函数可以直接访问类的所有数据成员。
注意:对象所占据的内存空间只是用于存放数据成员,函数成员不在每一个对象中存储副本。/**当然是这样,属性构成对象实体,一个类的所有对象到同样的区域调用函数成员以实现相应功能**/
 
拷贝构造函数
其形参是本类的对象的引用。其作用是使用一个已经存在的对象(参数)去初始化一个新的同类的对象。
如果没有定义拷贝构造函数,需要时系统也会自动生成一个默认拷贝构造函数,把初始值对象的每个数据成员的值都复制到新建立的对象中。
以下三种情况下都会调用拷贝构造函数:
(1)       当用类的一个对象去初始化该类的另一个对象时。
(2)       如果函数的形参是类的对象,调用函数时,进行形实结合时。
(3)       如果函数的返回值是类的对象,函数执行完成返回调用者时。
在函数内部定义的对象是局部对象,离开函数后就消亡了,所以在处理这种情况时编译系统会在主函数中创建一个临时的无名对象,该临时对象的生存期只在函数调用所处的表达式中。
例如:
         Point g( )
               {     Point A(1, 2);
                Return A;
         }
         Int main( )
               {     Point B;
                B = g( );
                Return 0;
         }
执行“Return A;”语句时,实际上是调用拷贝构造函数将A的值拷贝到临时对象中。函数g运行结束时对象A消失,但临时对象会存在于表达式“B = g( );”中。       计算完这个表达式后,临时对象的使命也就完成了,该临时对象也就自动消失。
 
析构函数
       用来完成对象被删除前的一些清理工作。
在对象的生存期即将结束的时刻由系统自动调用。
析构函数不接受任何参数。
一般来讲,如果希望程序在对象被删除之前的时刻自动(不需要人为进行函数调用)完成某些事情,就可以把他们写道析构函数中。事实上,在很多情况下,用析构函数来进行扫尾工作时必不可少的,例如在windows操作系统中,每一个窗口就是一个对象,在窗口关闭之前,需要保存显示于窗口中的内容,就可以在析构函数中完成。/**看起来不错,还没有试过**
阅读(752) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~