- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C编程注意事项
C++编程注意事项及常识
1.类和对象
C++程序是由许多类所构成的,类是C++的灵魂。
程序=算法+数据结构
类是对象的抽象,而对象是类的具体实例。
对于类体内定义的函数,一般都省写inline,如果成员函数不在类体内定义,而在类体外定义,系统并不把它默认为内置(inline)函数。
如果在类体外定义inline函数,则必须将类定义和成员函数的定义都放在同一个头文件中(或者写在同一个源文件中)。
每个对象所占用的存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。
p-hour表示p当前所指向的对象t中的成员hour,(*p).hour也是对象t中的成员hour,因为(*p)就是对象t。在p指向t的前提下,p-hour,(*p).hour和t.hour三者等价。
类是一种抽象的数据类型,并不是一个实体,也不占存储空间,而对象是实际存在的实体,是占存储空间的,其数据成员是有值的,可以被引用的。
如果在类的定义中既不指定private,也不制定public,则系统就默认认为是私有的。
当接口与实现(对数据的操作)分离时,只要类的接口没有改变,对私有实现的修改不会影响程序的其他部分。
类声明头文件就成为用户使用类库的有效方法和公用接口。
包含成员函数定义的文件就是类的实现。
关于类和对象的进一步讨论
构造函数来处理对象的初始化。构造函数的名字必须与类名同名,不具有任何类型,不返回任何值。
构造函数的赋值语句是写在构造函数函数体中的,只有在调用构造函数时才执行这些赋值语句,为当前的对象中的数据成员赋值。
构造函数不需用户调用,也不能被用户调用。
在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句,但是一般不提倡在构造函数中加入与初始化无关的内容。
如果用户自己没有定义构造函数,C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。
带参数的构造函数中的形参,其对应的实参在定义对象时给定。用这种方法可以方便地实现对不同的对象进行不同的初始化。
还可以使用参数初始化表来实现对数据成员的初始化,例如:
Box::Box(int h,int w,int l):height(h),width(w),length(l){ }
可以定义多个构造函数,但是形参不能相同,编译系统是根据函数调用的形式来确定对应的函数的。
在调用构造函数时不必给出实参的构造函数,称为默认构造函数,一个类只能有一个默认构造函数否则,系统就无法辨别应执行哪个构造函数。
尽管在一个类中可以包含多个构造函数,但是对每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。
在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。
析构函数也是一个特殊的成员函数,对象生命周期结束时会自动执行析构函数。
static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。
析构函数不返回任何值,没有函数类型,也没有函数参数。由于没有函数参数,它不嗯给你被重载。一个类可以有多个构造函数,但是只能有一个析构函数。
析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。它还可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”。想让析构函数完成任何工作,都必须在定义的析构函数中指定。
先构造的后析构,后构造的先析构(越早被创建,对象越早被撤销。)
数组不仅可以由简单变量组成,也可以由对象组成。
在建立数组时,同样要调用构造函数。在需要时可以在定义数组时提供实参以实现初始化。如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供实参。
编译系统只为每个对象元素的构造函数传递一个实参,所以在定义数组时提供的实参个数不能超过数组元素个数。
在建立对象数组时,分别调用构造函数,对每个元素初始化。每一个元素的实参分别用括号包起来,对应构造函数的一组形参,不会混淆。
指针可以用来指向一般的变量,也可以指向对象。
对象空间的起始地址就是对象的指针。
在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,成为this。它是指向本类对象的指针。它的值是当前被调用的成员函数所在的对象的起始地址。
this指针是隐式使用的,它是作为参数被传递给成员函数的。
如果一个对象被声明为常对象,则不鞥呢调用该对象的非const型成员函数。
把函数声明为可变的数据成员(mutable int count;),就可以用声明为const的成员函数来修改它的值。
常数据成员只能通过构造函数的参数初始化表对常数据成员进行初始化。如:
const int ho
文档评论(0)