- 1、本文档共72页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 类与对象 6.1 类的定义 类构成了实现C++面向对象程序设计的基础,在C++语言面向对象程序设计中占据着核心地位。它把数据和作用在这些数据上的操作组合在一起,是封装的基本单元。对象是类的实例,类定义了属于该类的所有对象的共同特性。 6.1.1 类的含义与表述 一个类是对一种概念的描述,或者说是对某一类具体事物的抽象。 C语言中对“点”的描述: struct Point { double x; double y; }; 上述描述说明了点由两个坐标组成这样的概念。不过,它没有说明所描述概念的操作特性。 C++丰富了C语言的结构并称之为类,使其能够描述出完整的概念。例如: struct Point { double x; double y; void display( ){ cout x , y; } void move(double rx, double ry) { x += rx; y += y; } }; 类中封装的数据和函数称为类的成员,可进一步称为数据成员和函数成员。 C++中定义类时更多地使用class而不是struct作为关键字。 6.1.2 类定义的语法规则 类定义包含类头和类体两部分,形式如下: 类有三种访问控制: private 访问控制符 protected public 使用说明: 类的三个访问控制符可以任意顺序出现任意次。 不能在类声明中给数据成员赋初值。 (C++规定只有在类对象定义之后才能给数据成员赋初值) protected用于继承(详见第9章) 数据成员不能用auto、register、extern修饰。 类的作用域 类的作用域指在类的声明中的一对花括号所形成的作用域。 在类的作用域内部或外部访问同一个名字(变量或函数)的效果是不同的。 6.2 类对象 从语法上讲,类定义使我们得到了一种新的数据类型。 它们比C++的内置类型更复杂,但有着一般类型的效果,如可以定义Point类型的对象(变量)、指针变量和数组等。 6.2.1 对象定义 一个自定义的类类型与内置类型在语法上并没有什么差异。例如 : Date d1, d2, *pd, a[10]; 对象和指针之间的运算与简单变量相同,对象间可以直接赋值: pd = d1; d2 = d1; 对象赋值语句 当一个对象赋值给另一个对象时,所有的数据成员都会逐位复制。 如:A a1, a2; a1.x=a2.x; a1.y=a2.y; 说明: 两个对象类型必须相同; 两个对象间仅数据相同,而两个对象仍是分离的; 当类中存在指针时,可能产生错误。 6.2.2 成员访问 1. 在类的内部 在类的内部(主要是类的方法中)访问类的成员时只要直接使用成员名即可,无论属性还是方法都如此。 2. 在类的外部 一般形式: 对象名.数据成员名 对象名.成员函数名(实参表) 若定义的是指向对象的指针,则访问此对象的成员时,要使用“-”操作符。 6.2.3 对象存储 在生成对象时,每个对象都占用包括所有数据成员在内的存储空间(静态属性除外,参见8.1),即每个对象保存着一份所有数据成员的“拷贝”,但所有对象的成员函数只有一份公用的拷贝,单独存储。因此,一个对象占用的存储空间是所有数据成员占用的存储空间之和,不包括成员函数。 cout sizeof(Date) ‘,’ sizeof(d); //d是上述代码中的Date型变量 上述语句的输出结果为“12,12”,对应于3个int类型数据成员的存储空间之和(有时会因内部调整而多占用一些空间)。 6.3 类的方法 通常,类定义中需要提供相当数量的方法,可以分为两类: 其一是处理属性的方法 其二是反映对象行为的方法 6.3.1 为类提供必要的方法 首先,由于类对成员的隐藏特点,使得类外常常不能直接访问对象的属性。 如果希望外界能够得到或修改一个属性,需要提供相应的公开方法。因此,每个与外界发生联系的属性常常伴随着两个公开的方法。 其次,提供允许外界“调用”的公开方法,使对象产生应有的行为,如display和move。此外,还可能需要定义一些类内使用的private方法以及为其派生类准备的protected方法。 6.3.2 inline方法 除了极简单的方法之外,大多数的类方法都在类内声明而在类外实现,以使类的定义与实现分离。如果一个类的方法直接在类定义内实现,称为内联(inline)方法。 C++将以内联函数的方式处理这种类方法,即内联方法将在程序中每个调用点上被内联地展开。 6.3.3 方法重载与缺省参数 一个类中也可以定义参数不同的同名函数,构成方法重载,或为方法提供默认的参数值
您可能关注的文档
- 编译原理教程 第二版 教学课件 作者 胡元义 第6-8章 第7章.ppt
- 编译原理教程 第二版 教学课件 作者 胡元义 第6-8章 第8章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第1章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第2章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第3章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第4章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第5章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第6章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第7章.ppt
- 编译原理教程 第三版 教学课件 作者 胡元义 全书 第8章.ppt
- 标准C++程序设计 教学课件 作者 牛连强 第7章 组织程序结构的相关技术.ppt
- 标准C++程序设计 教学课件 作者 牛连强 第8章 静态成员、友员与成员指针.ppt
- 标准C++程序设计 教学课件 作者 牛连强 第9章 继承.ppt
- 标准C++程序设计 教学课件 作者 牛连强 第10章 虚函数与多态性.ppt
- 标准C++程序设计 教学课件 作者 牛连强 第11章 运算符重载.ppt
- 标准C++程序设计 教学课件 作者 牛连强 第12章 流与文件操作.ppt
- 标准书号28 29 308 02933 第八章.ppt
- 标准书号28 29 308 02933 第二章.ppt
- 标准书号28 29 308 02933 第九章.ppt
- 标准书号28 29 308 02933 第六章.ppt
文档评论(0)