转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 网络书斋 >> 正文
第6章 类和对象考点归纳         ★★★

《计算机二级C++考试辅导资料大全》之第6章 类和对象考点归纳”篇

作者:闵涛 文章来源:闵涛的学习笔记 点击数:5034 更新时间:2007/10/4 16:57:39
   6.1 类的定义
     1类的定义
     类的定义可以分为两部分:说明部分和实现部分。说明部分说明类中包含的数据成员和成员函数,实现部分是对成员函数的定义。类定义的一般格式如下:
       //类的说明部分
       class<类名>
       {
     public:
         <成员函数或数据成员的说明>        //公有成员,外部接口
       protected:
         <数据成员或成员函数的说明>        //保护成员
       private:
         <数据成员或成员函数的说明>        //私有成员
       };
       //类的实现部分
       <各个成员函数的实现>
其中,class是声明类的关键字;<类名>是要声明的类的名字,必须符合标识符定义规则;花括号表示类的声明范围,说明该类的成员,其后的分号表示类声明结束。类的成员包括数据成员和成员函数,分别描述类所表达的问题的属性和行为。关键字public、private和protected称为访问权限修饰符,它们限制了类成员的访问控制范围。
     各个成员函数的实现即可以在类体内定义,也可以在类体外定义。如果一个成员函数在类体内进行了定义,它将不出现在类的实现部分;如果所有的成员函数都在类体内进行了定义,则可以省略类的实现部分。在类体内定义的成员函数都是内联函数。
     2类成员的访问控制
     类中提供了3种访问控制权限:公有(public)、私有(private)和保护(protected)。其中,公有类型定义了类的外部接口,任何一个外部的访问都必须通过外部接口进行;私有类型的成员只允许本类的成员函数访问,来自类外部的任何访问都是非法的;保护类型介于公有类型和私有类型之间,在继承和派生时可以体现出其特点。
     3类的数据成员
     类中的数据成员描述类所表达的问题的属性。数据成员在类体中进行定义,其定义方式与一般变量相同,但对数据成员的访问要受到访问权限修饰符的控制。
     在定义类的数据成员时,要注意以下几个问题。
     (1)类中的数据成员可以是任意类型,包括整型、浮点型、字符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为该类的成员对象而存在。自身类的对象是不可以作为自身类的成员存在的,但自身类的指针可以。
     (2)在类体中不允许对所定义的数据成员进行初始化。
     4类的成员函数
     类的成员函数描述类所表达的问题的行为。类中所有的成员函数都必须在类体内进行说明。但成员函数的定义既可以在类体内给出,也可以在类体外给出。
     第一种方式是将成员函数直接定义在类的内部。
     第二种方式是在类声明中给出对成员函数的说明,而在类外部对成员函数进行定义(但成员函数仍然在类范围内)。这种在类外部定义的成员函数的一般格式是:
       <返回类型><类名>::<成员函数名>(<参数表>)
       {
         <函数体>
       }
     在类体外定义成员函数时,要注意必须在成员函数名前加上类名和作用域运算符(::)。作用域运算符用来标识某个成员属于某个类。作用域运算符的使用格式如下:
       <类名>::<成员函数名>(<参数表>)
     或
       <类名>::<数据成员名>
     成员函数的两种定义方式之间是有差别的。如果一个成员函数的声明和定义都在类体内,那么这个成员函数就是内联函数。如果一个成员函数的声明在类体内,而定义在类体外,这时对该成员函数的调用是按一般函数进行的。如果要将定义在类体外的成员函数也作为内联函数处理,就必须在成员函数的定义前加上关键字“inline”,以此显式地说明该成员函数也是一个内联函数。
     成员函数除了可以定义为内联函数以外,也可以进行重载,可以对其参数设置默认值。
     6.2 对象的定义
     1对象的定义
     对象是类的实例,一个对象必须属于一个已知的类。因此在定义对象之前,必须先定义该对象所属的类。
     对象的定义格式如下:
       <类名><对象名>(<参数表>);
     其中,<类名>是待定义的对象所属的类的名字。<对象名>中可以有一个或多个对象名,多个对象名之间用逗号分隔。<对象名>中,可以是一般的对象名,也可以是指向对象的指针名或引用名,还可以是对象数组名。<参数表>是初始化对象时需要的,建立对象时可以根据给定的参数调用相应的构造函数对对象进行初始化。无参数时表示调用类的缺省构造函数。
     2对象的成员
     一个对象的成员就是该对象的类所定义的成员,包括数据成员和成员函数。定义了对象后,可以使用“ .”运算符和“->”运算符访问对象的成员。其中,“ .”运算符适用于一般对象和引用对象,而“->”运算符适用于指针对象(即指向对象的指针)。访问对象成员的一般格式如下:
       <对象名> .<数据成员名>或<对象名>-><数据成员名>
       <对象名> .<成员函数名>(<参数表>)或<对象名>-><成员函数名>(<参数表>)
     6.3 构造函数和析构函数
     1构造函数和析构函数的定义。构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一种特定的状态,使该对象具有区别于其他对象的特征。构造函数在对象被创建的时候由系统自动调用。
     构造函数也是类的成员函数,但它是一种特殊的成员函数,它除了具有一般成员函数的特性之外,还具有一些特殊的性质:
     (1)构造函数的名字必须与类名相同;
     (2)构造函数不指定返回类型,它隐含有返回值,由系统内部使用;
     (3)构造函数可以有一个或多个参数,因此构造函数可以重载;
     (4)在创建对象时,系统会自动调用构造函数。
     2缺省构造函数和缺省析构函数
     缺省构造函数就是调用时不必提供参数的构造函数。缺省的构造函数的函数名与类名相同,它的参数表或者为空,或者它的所有参数都具有默认值。前面日期类Date的定义中,构造函数Date(int y=2000);就是缺省构造函数。
     如果类中定义了一个缺省构造函数,则使用该函数;如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数,它的定义格式如下:
       <类名>::<类名>()
       {
       }
     每个类都必须有一个析构函数。如果一个类没有声明析构函数,编译器将生成一个公有的析构函数,即缺省析构函数,它的定义格式如下:
       <类名>::~<类名>()
       {
       }
     3拷贝构造函数
     类中有一种特殊的构造函数叫做拷贝构造函数,它用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下:
       <类名>::<类名>(const<类名>&<引用对象名>)
       {
         //拷贝构造函数体
       }
     拷贝构造函数具有以下特点:
     (1)也是一种构造函数,因此函数名与类名相同,并且不能指定函数返顺类型。
     (2)只有一个参数,是对同类的某个对象的引用。
     (3)每一个类中都必须有一个拷贝构造函数。如果类中没有声明拷贝构造函数,编译器会自动生成一个具有上述形式的公有的拷贝构造函数。
     6.4 对象的生存期
     1全局对象、静态对象与局部对象
     对象的生存期是指对象从被创建开始到被释放为止的时间。对象按生存期可分为3类:
     (1)局部对象:当程序执行到局部对象的定义之处时,调用构造函数创建该对象;当程序退出定义该对象所在的函数体或程序块时,调用析构函数释放该对象。
     (2)静态对象:当程序第一次执行到静态对象的定义之处时,调用构造函数创建该对象;当程序结束时调用析构函数释放该对象。
     (3)全局对象:当程序开始执行时,调用构造函数创建该对象;当程序结束时调用析构函数释放该对象。
     2自由存储对象
     动态内存分配技术可以保证在程序运行过程中按照实际需要申请适量的内存,使用结束后进行释放。这种在程序运行过程中根据需要可以随时建立或删除的对象称为自由存储对象。建立和删除工作分别由堆运算符new和delete完成。
     6.5 this 指针
     C+ +提供了一个特殊的对象指针——this指针,它是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象。
     this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针。
     6.6 静态成员
     对于类中的非静态数据成员,每一个类对象都拥有一个拷贝(副本),即每个对象的同名数据成员可以分别存储不同的数值,这是保证每个对象拥有区别于其他对象的特征的需要。而类中的静态成员则是解决同一个类的不同对象之间的数据和函数共享问题的。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的原则,又保证了安全性。
     静态成员表示整个类范围的信息,其声明以static关键字开始,包括静态数据成员和静态成员函数。
     1静态数据成员
     静态数据成员声明时要使用关键字static。
     静态数据成员在每个类对象中并不占有存储空间,它只是在每个类中分配有存储空间,供所有对象公用。静态数据成员的值对每个对象都是一样的,但它的值可以被任何一个对象更新,从而实现了同一类的不同对象之间的数据共享。
     静态数据成员具有静态生存期,必须对它进行初始化。静态数据成员初始化的一般格式如下:
       <数据类型><类名>::<静态数据成员名>=<初始值>;
     在对静态数据成员初始化时应注意:
     (1)由于在类的声明中仅仅是对静态数据成员进行了引用性声明,因此必须在文件作用域的某个地方对静态数据成员进行定义并初始化,即应在类体外对静态数据成员进行初始化(静态数据成员的初始化与它的访问控制权限无关)。
     (2)静态数据成员初始化时前面不加static关键字,以免与一般静态变量或对象混淆。
     (3)由于静态数据成员是类的成员,因此在初始化时必须使用作用域运算符(::)限定它所属的类。
     2静态成员函数
     公有的静态数据成员可以直接访问,但私有的或保护的静态数据成员却必须通过公有的接口进行访问,一般将这个公有的接口定义为静态成员函数。
     使用static关键字声明的成员函数就是静态成员函数,静态成员函数也属于整个类而不属于类中的某个对象,它是该类的所有对象共享的成员函数。
     静态成员函数可以在类体内定义,也可以在类外定义。当在类外定义时,要注意不能使用static关键字作为前缀。
     由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。
     6.7 常成员
     虽然数据隐藏保证了数据的安全性,但各种形式的数据共享却又不同程度地破坏了数据的安全性。因此,对于既需要共享又需要防止改变的数据应该定义为常量进行保护,以保证它在整个程序运行期间是不可改变的。这些常量需要使用const修饰符进行定义。const关键字不仅可以修饰类对象本身,也可以修饰类对象的成员函数和数据成员,分别称为常对象、常成员函数和常数据成员。
   &nbs

[1] [2]  下一页


[招考就业]2010年国家公务员考试报考{参考指南}  [招考就业]2010年国家公务员考试备考指南
[Web开发]net在线考试系统如何控制考试时间  [Web开发]asp.net网上考试系统功能介绍
[网页制作]DreamWeaver+Css轻松实现网页段落首行缩进!  [网页制作]DIV+CSS+javascript实现DIV对象显示在页面任何位置…
[网页制作]div+css实现网页模块或栏目拖动(即拖拽效果)  [网页制作]XHTML+CSS兼容性解决方案
[网页制作]网页设计之css+div PK table+css  [网页制作]DIV+CSS三行两列经典布局
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 电脑应用  · 网络应用
    · 软件开发  · 软件使用
    · 站长学院  · 数据库
    · 应用范文  · 网络书斋
    · 考试认证  · 精彩网文
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台