- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 类与对象1
第二章 类与对象;本章主要内容;重点:
根据具体问题的算法编写程序,重点考虑本问题的解决方法和流程
形式:
主模块+若干个子模块(main( )+子函数)。
每个函数实现一项功能
特点:
设计者必须考虑每一个细节
数据与函数分离,所有数据都是公用的。;缺点:
数据与代码分离导致数据改变时需重新编写函数
程序功能扩充时程序的可重用性差,效率低。;例:编写小型公司人员信息管理系统
某小型公司主要有人员,经理、兼职技术人员、销售经理和兼职推销员。现在需要存储这些人员的姓名、编号、级别、当月薪水、计算月薪总额并显示全部信息。
月薪计算方法:经理拿固定月薪8000元兼职技术人员按每小时100元领取月薪兼职推销员月薪按当月销售额的4%提成销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售额的5‰。;分析:
一般数据描述用结构体struct employee{ char *name; //姓名 int no; //编号 char *job; //职位 float paytotal; //月薪总额
float hourlyRate; //每小时酬金
int workHours; //当月工作时数
float CommRate; //销售额提取百分比
float sales; //当月销售额
}
不同职位月薪计算方法和需要数据个数不同,专用与公用数据混杂,数据结构过于庞大,结构不清;程序结构:
函数:
employee *input ( ) 输入全部数据
必须输入全部数据,即使不使用的部分专有数据也不例外,且输入顺序要与数据文件顺序匹配
月薪计算函数pay
利用函数重载编写各类人员月薪计算函数pay,这样主函数中必须要有相应分支结构,按职位调用相应pay函数
void output( employee person ) 输出全部数据
除输出公用数据外,其中应有分支结构,根据职位不同输出其专有数据。如:兼职技术人员要输出每小时薪金数及小时数等信息;分析:
修改:
添加钟点工:4小时以内每小时5元, 4小时以上每小时8元。
程序修改范围:添加pay函数,修改所有其他函数包括main函数包括数据文件
结论:
面向过程的程序设计在程序的通用性、扩展性方面存在缺陷。
;§2.1 面向对象程序设计;抽象:将研究对象(问题)分类并总结出每类对象的公共性质并加以描述
将具有相同结构和特性的一批对象总结出来用“类”这种数据结构描述,称为对象的抽象
数据抽象:总结出同类对象的基本特点(属性)用物理量(变量等)描述
代码抽象:总结出同类对象的共有的行为特征(操作或具有的功能),编写相应专用函数
例:编写兼职技术人员的月薪计算函数;封装:将数据和操作放在一起,视为一个整体称为类,与外界相对分隔。;§2.1 面向对象程序设计;§2.1 面向对象程序设计;§2.1 面向对象程序设计;面向对象的基本特点;§2.1 面向对象程序设计;§2.2 类与对象的定义; 类是一种用户自定义类型,它是从结构体引申而来:
struct student
{
int num;
char name[10];
int score;
};
student stu, stu2;
结构体只包括数据,没有操作,结构体成员在本作用域中是“敞开”的,使用不受限制;§2.2 类与对象的定义;结构体类型的扩展-在定义中加入代码(函数):
struct student
{ int num;
char name[10];
int score;
void display( )
{ cout num: num endl;
cout name: name endl;
cout score: score endl;
}
};;封装后的结构体仍然开放,所有成员均可直接使用,但须按格式使用包括函数成员。
void main( ) //no2.2-1A.cpp
{ student stu;
cout please input data: ;
cin stu.num stu.score;
stu.display( );
}
封装后的结构体仍然开放,所有成员均可直接使用;为保护专有数据兼顾外界使用,设置访问权限,让专有成员只能内部使用,公开成员则任意使用
stuct student
{ private:
int num;
char name[10];
char sex;
public:
文档评论(0)