佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

搜索
查看: 1223|回复: 3

关于c++ constructor的疑问

[复制链接]
发表于 1-8-2009 06:44 PM | 显示全部楼层 |阅读模式
最近进入这一课,construstor, copy constructor, destructor, statis const contructor,可是看来看去都不明白,有哪位高手可以讲解下颌如何应用它吗?多谢。
回复

使用道具 举报


ADVERTISEMENT

发表于 1-8-2009 08:46 PM | 显示全部楼层
constructor 就是用来初始化你的class object的程式。例如说你有一个class:
class MyClass;

当你想系统发出new 指令时:
MyClass *my_new_class = new MyClass();

系统就会为你保留一个可以容纳下一个MyClass object的记忆空间,并把你的MyClass 的基本框架填进去。在填入基本框架时,就得初始化你的variables 的内容,而这个工作,就是由constructor来执行。也就是说,Constructor就是你用来告诉系统,你的object有些什么variables,以及这些variables的初始内容。

Destructor 则是和 Constructor相反,基本上就是用来收拾烂摊子的。举个例子,如果你的constructor里面,你有new了一些variables(也就是Dynamic allocation),你必须在你的object结束其生命周期时释放这些被你预订下来的记忆体空间,或者恢复一些你改动过的系统设定。否则这些被预订的记忆体空间就会变成memory leak,而改动过的系统设定就会影响系统运作。

static 和 const 是许多电脑语言的基础Keyword,你可以在大多数电脑语言的help file里面找到它们的解释,我就不多说了。
回复

使用道具 举报

发表于 3-8-2009 08:49 PM | 显示全部楼层
  1. class cComplexNumber
  2. {
  3. public:
  4.         cComplexNumber();                                //default constructor
  5.         cComplexNumber(const cComplexNumber& src);        //copy constructor
  6.         cComplexNumber(float fReal, float fImaginery);        //parameterized constructor
  7.         ~cComplexNumber();        //destructor

  8.         cComplexNumber&        operator=(const cComplexNumber& src);        //assignment operator
  9.         float        m_fReal;
  10.         float        m_fImaginery;
  11. }
复制代码
default constructor, copy constructor, assignment operator & destructor 是c++的四大金刚, 充分掌握它是很重要的。。。
假设我们要写一个object来代表complex number...


当我们在code里面引用:
cComplexNumber myNumber;
cComplexNumber* pMyNumber = new cComplexNumber();

系统会拿出足够容纳这个物件的空间,并叫default constructor来初始化分配给你的空间。比如两个float总共是8bytes, 刚分配的记忆空间里可能还残余有之前使用者的资料,为了避免读取不正确的value,我们都必须将这部分记忆空间填上我们默认的value (通常是0)



cComplexNumber mySecondNum( myNumber );
cComplexNumber myThirdNum = myNumber;     // 这个对新手来讲很特别的
cComplexNumber *pSecondNumber = new cComplexNumber( myNumber );

copy constructor 的功用跟default constructor 一样, 只不过多需要一个跟自己同样的物件来作为初始资料参考源. 也就是以其用默认value, 我们以参考源的value来初始化attribute value, 也就是所谓的抄/copy咯


cComplexNumber myForthNum(0.1, 0.2);
cComplexNumber *pForthNumber = new cComplexNumber( 0.3, 0.4 );
parameterized constructor 是 copy constructor 的'变异版", 不再受限于只能拿相同的物件来作为初始资料; 比如上面的例子里我们以constant value来作为初始化参考数

[ 本帖最后由 yeenfei 于 3-8-2009 09:19 PM 编辑 ]
回复

使用道具 举报

发表于 3-8-2009 09:39 PM | 显示全部楼层
另一个例子

constructor
假设你向学校要求一片墙壁(memory)来布景, 校方保留(allocate)一面墙壁给供你使用后, 可能之前有人涂鸦过,所以你要将墙粉刷(initialise)一遍才开始用咯

copy constructor
你有可能没主意该如何开始, 最容易的方法当然是以一面已经完成的墙壁为参考(reference),照着上面的内容来粉刷咯

parameterized constructor
如果没有墙壁给你参考,只好找别的非墙类参照物咯。你可以拿一本漫画或海报,然后按着上面的相关内容粉刷

destructor
使用完毕后,在归还给校方前,我们当然要自己搞出的手尾咯。如果有另外借来的东西,就要归还回去
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2026 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 1-5-2026 09:21 AM , Processed in 0.056924 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表