零点起飞学C++之面向对象的本质——封装.pptx

零点起飞学C++之面向对象的本质——封装.pptx

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第13章面向对象的本质——封装封装是将描述客观事物的一组数据和操作组合在一起,对外隐含具体的实现,通过接口来访问。这个封装体就是类。通过类,C++提供了对数据结构的封装和抽象,并为程序员提供了定义新的数据类型的手段。学习本章,读者就可以通过对类的使用编写出更加符合实际问题的程序,进一步提高代码的重用能力。

13.1构建类类是将一组对象的数据结构和操作中相同的部分抽出来组成的集合,是对象共同的特征。因此它是对对象的抽象和泛化,是对象的模板。本节将详细讲解类的有关概念。

13.1.1声明类在C++中,新的数据类型可以用class来构造。类的声明语法与C语言中的struct声明类似,只是class还包含函数声明。

【示例13-1】定义point类。classpoint{intx,y; public: voidsetpoint(int,int); };分析:该示例声明了一个名为point的类。它包含的数据为x、y,还包含了一个名为setpoint()的函数。函数被public关键字说明为公有的,数据没有被说明,但默认是私有的。下面再以一个更完整的示例进一步来说明类的声明方法。

【示例13-2】声明一个简单的student学生类。classstudent{private: //访问规则intid; //学号char*name;//姓名floatchinese,english,math;//语文、英语、数学三门课程成绩public: //访问规则student(); //构造函数student(int,char*,float,float,float);

//构造函数,设置学号,姓名,三门课程成绩~student(); //析构函数voidsetid(int); //设置学号voidsetname(char*); //设置姓名voidsetscore(float,float,float); //设置课程分数floatsum(); //求三门课程总分floataverage(); //求三门课程平均分};

分析:在这个类中,共有5个数据,分别是id、name、chinese、english、math,用于记录学生的学号、姓名和三门课程的成绩。它们被关键字private说明为私有的,即这些数据只能被类的成员函数和友元函数(参见13.1.7节)访问。类中声明了8个函数,用关键字public说明为公有的。第1个函数是构造函数,负责构造类对象,在定义对象时由系统自动调用。第2个函数也是构造函数,但是与第1个的形式不一样,它带了参数。这属于重载现象,本书后面的章节中有专门讲解。构造函数的名字必须和类的名字相同。

第3个函数是析构函数,标志是前面有一个‘~’符。该函数在销毁对象时自动被调用,负责对象销毁后的善后工作。析构函数必须是类的名称前加‘~’符。第4、5、6这3个函数负责私有属性的访问。因为属性是私有,所以只有通过student类提供的这3个函数才能从类的外部访问到它们。最后2个函数负责具体的计算工作,分别计算求总分和求平均分。除了该示例中的限定符public和private外,还有一个限定符是protected。

它们都用来支持信息的隐藏机制,将类的成员分成了3类:公有成员、私有成员和保护成员。公有成员(包括类的属性和方法):提供了类的外部界面,它允许类的使用者来访问它。私有成员(包括类的属性和方法):只能被该类的成员函数访问,也就是说只有类本身能够访问它,任何类以外的函数对私有成员的访问都是非法的。当私有成员处于类声明中的第一部分时,此关键字可以省略。保护成员:对于派生类来说,保护成员就像是公有成员,可以任意访问。但对于程序的其他部分来说,就像是私有成员,不允许被访问。

假设程序中有一个函数,它直接访问并操作某类的数据成员,一旦该类的数据成员被修改或者被删除,那么这个函数很可能需要被重写。如果程序中存在大量这样的函数,就会增加软件的开发和维护成本。此时,可以通过访问限定符将类的数据成员定义为私有成员,然后在类中定义一个公有的成员函数,访问并操作类中的私有属性。这样程序中的函数无法直接访问私有的数据,只有通过公有成员函数才能访问并且操作它们。例如,为了能够访问student类中的语文成绩,需要增加一个公有的成员方法getchinese()。如果类中的数据成员被修改,那么只需要修改相应的公有成员方法,而不必改动程序中的函数。

【示例13-3】增加成员chinese的访问函数。classstudent{private:floatchinese; //私有属性public:fl

文档评论(0)

iris + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档