面向对象和过程语言区别,回初始化和构造函数的区别

看了一个帖子,问类的构造函数与初始化函数的区别。其实搞清楚这个区别,需要先搞清楚面向对象中,方法和过程化语言中函数的区别。

过程化语言中,函数可以看做一个下水管道的一部分。所有的下水管道部分组成一个网络,当数据(也就是水)灌入时,会最终有个一个或多个出口流出。而这些函数(管道)不管是否实际有水,都是始终存在,且唯一存在的。

面向对象的设计语言的思想和过程化语言的思想最大的区别在于,面向对象看待机器模拟客观事物时,是仿真的存在一个个实体。而每个实体有自己的类型。 那些属于类型的函数(就是方法)实际是这个实体的组成部分。有些实体可能从程序入口一直持续到结束。但很多实体是在运行时,才被创建出来。

我们写的类,包括类的定义和类的方法的实现,并不是具体的实体,也就是不等同于过程化语言中上面的那些管道。只是个模板,当需要实体创建时,才生成 出一个具体的类的实体存在于内存中,而此时当这个类有方法(这是屁话,至少有构造和析构函数)时,该实体对应该类的方法就存在了一个特定的函数。可能这个 函数被这个实体独立使用,也可能是用函数指针的方式被多个实体共同使用,但此时这个实体所引用的方法,才是如上面过程化语言的水管子。

因此,在面向对象语言中,存在一个实体创建的工作,这个在C这类过程化语言中通常是没有的。特殊写法,也可以操作。而这个创建工作本身就是属于构造,就是构造一个类的具体实体。如果这个类包含成员变量等,则这个构造过程就包括了开辟空间等操作。

而初始化,和构造没有关系,可以这样举例。你有张白纸,打算画图表还是打算写信,如果前者你需要初始化一下,画个二维格子,如果是后者,你需要画个 一维线条,区分每一行。这些工作叫做初始化。其前提是你存在了这个白纸。而在面向对象里,任何一个白纸,实质是个实体,构造函数的作用是创造这个白纸。可 能这个纸的大小,厚薄,是你关心的,这些和白纸的创建有关,则属于构造。

废话这么多,说点简单的判断方法(并不严格正确),如果涉及类的成员自身的空间操作,应该放在构造里,如果涉及空间内部值的操作。则放在初始化里。

转载于:https://my.oschina.net/luckystar/blog/56375

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值