c++编程思想04

c++编程思想04

ID:34569885

大小:476.38 KB

页数:14页

时间:2019-03-08

c++编程思想04_第1页
c++编程思想04_第2页
c++编程思想04_第3页
c++编程思想04_第4页
c++编程思想04_第5页
资源描述:

《c++编程思想04》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、下载第4章初始化与清除第2章利用了一些分散的典型C语言库的构件,并把它们封装在一个struct中,从而在库的应用方面做了有意义的改进。(从现在起,这个抽象数据类型称为类)。这样不仅为库构件提供了单一一致的入口指针,也用类名隐藏了类内部的函数名。在第3章中,我们介绍了存取控制(隐藏实现),这就为类的设计者提供了一种设立界线的途径,通过界线的设立来决定哪些是用户可以处理的,哪些是禁止的。这意味着数据类型的内部机制对设计者来说是可控的和能自行处理的。这样让用户也清楚哪些成员是他们能够使用并加以注意的。封装和实现

2、的隐藏大大地改善了库的使用。它们提供的新的数据类型的概念在某些方面比从C中继承的嵌入式数据类型要好。现在C++编译器可以为这种新的数据类型提供类型检查,这样在使用这种数据类型时就确保了一定的安全性。当然,说到安全性,C++的编译器能比C编译器提供更多的功能。在本章及以后的章节中,我们将看到许多C++的另外一些性能。它们可以让我们程序中的错误暴露无遗,有时甚至在我们编译这个程序之前,帮我们查出错误,但通常是编译器的警告和出错信息。所以我们不久就会习惯:在第一次编译时总听不到编译器那意味着正确的提示音。安全性

3、包括初始化和清除两个方面。在C语言中,如果程序员忘记了初始化或清除一个变量,就会导致一大段程序错误。这在一个库中尤其如此,特别是当用户不知如何对一个struct初始化,甚至不知道必须要初始化时。(库中通常不包含初始化函数,所以用户不得不手工初始化struct)。清除是一个特殊问题,因为C程序员一旦用过了一个变量后就把它忘记了,所以对一个库的struct来说,必要的清除工作往往被遗忘了。在C++中,初始化和清除的概念是简化类库使用的关键所在,并可以减少那些由于用户忘记这些操作而引起的许多细微错误。本章就来讨

4、论C++的这些特征。4.1用构造函数确保初始化在stash和stack类中都曾调用initialize()函数,这暗示无论用什么方法使用这些类的对象,在使用之前都应当调用这一函数。很不幸的是,这要求用户必须正确地初始化。而用户在专注于用那令人惊奇的库来解决他们的问题的时候,往往忽视了这些细节。在C++中,初始化实在太重要了,所以不能留给用户来完成。类的设计者可以通过提供一个叫做构造函数的特殊函数来保证每个对象都正确的初始化。如果一个类有构造函数,编译器在创建对象时就自动调用这一函数,这一切在用户使用他们的

5、对象之前就已经完成了。对用户来说,是否调用构造函数并不是可选的,它是由编译器在对象定义时完成的。接下来的问题是这个函数叫什么名字。这必须考虑两点,首先这个名字不能与类的其他成员函数冲突,其次,因为该函数是由编译器调用的,所以编译器必须总能知道调用哪个函数。Stroustrup的方法似乎是最容易也是最符合逻辑的:构造函数的名字与类的名字一样。这使得这样的函数在初始化时自动被调用。下面是一个带构造函数的类的简单例子:56C++编程思想下载现在当一个对象被定义时:这时就好像a是一个整数一样:为这个对象分配内存。

6、但是当程序执行到a的定义点时,构造函数自动被调用,因为编译器已悄悄地在a的定义点处插入了一个X::X()的调用。就像其他成员函数被调用一样。传递到构造函数的第一个参数(隐含)是调用这一函数对象的地址。像其他函数一样,我们也可以通过构造函数传递参数,指定对象该如何创建,设定对象初始值等等。构造函数的参数保证对象的所有部分都被初始化成合适的值。举例来说:如果类tree有一个带整型参数的构造函数,用以指定树的高度,那么我们就必须这样来创建一个对象:treet(12);//12英尺高的树如果tree(int)是唯

7、一的构造函数,编译器将不会用其他方法来创建一个对象(在下一章我们将看到多个构造函数以及调用它们的不同方法)。关于构造函数,我们就全部介绍完了。构造函数是一个有着特殊名字,由编译器自动为每个对象调用的函数,然而它解决了类的很多问题,并使得代码更容易阅读。例如在上一个代码段中,对有些initialize()函数我们并没有看到显式的调用,这些函数从概念上说是与定义分开的。在C++中,定义和初始化是同一概念,不能只取其中之一。构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不

8、同。后者虽然也不返回任何值,但我们还可以让它做点别的。而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由用户自己来显式地调用构造函数与析构函数,这样一来,安全性就被破坏了。4.2用析构函数确保清除作为一个C程序员,我们可能经常想到初始化的重要性,但很少想到清除的重要性。毕竟,清除

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。