C面向对象程序设计基础.pptx
《C面向对象程序设计基础.pptx》由会员分享,可在线阅读,更多相关《C面向对象程序设计基础.pptx(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1C面向对象程序设计面向对象程序设计(chnxshj)基基础础第一页,共68页。2目录(ml)1.1函数和函数参数函数和函数参数 1.2输入输出输入输出1.3类类1.4抽象抽象(chuxing)类型和模板类型和模板第1页/共68页第二页,共68页。3 1.1 函数(hnsh)和函数(hnsh)参数 1.1.1函数类型 C+中有两种类型函数:常规函数和成员函数。常规函数用于完成一个(y)特定的功能,成员函数用于类方法的定义。无论是常规函数还是成员函数,其定义都包括四个部分:函数名、形式参数表、返回类型和函数体。函数的使用者通过函数名来调用函数,调用过程是把实际参数表传送给形式参数表作为函数
2、的数据来源,然后执行函数体中的语句实现该函数的功能,最后得到的返回值由函数名带回函数的调用者。成员函数是用于类方法定义的,因此,只有该类的对象才能调用其成员函数。第2页/共68页第三页,共68页。4 1.1.2 函数名重载 C+允许(ynx)函数名重载,即允许(ynx)若干个相同的函数名能在相同作用域内使用。编译系统根据函数引用的参数类型和参数个数判明函数的使用。例11函数名重载 include int max(int a,int b)if(a=b)return a;else return b;第3页/共68页第四页,共68页。5float max(float a,float b,float
3、c)float max(float a,float b,float c)if(a=b&a=c)return a;if(a=b&a=c)return a;else if(ac)return b;else if(ac)return b;else return c;else return c;void main()void main()cout cout“max(2,3)=max(2,3)=“max(2,3)endl;max(2,3)endl;cout cout“max(2.3,5.6,3.1)=max(2.3,5.6,3.1)=“max(2.3,5.6,3.1)endl;max(2.3,5.6,3
4、.1)endl;第4页/共68页第五页,共68页。6 1.1.3 函数参数 C+中函数(包括常规函数和成员函数)参数有四种方式:值参数、常值参数、引用参数和常值引用参数等方式。但常值参数方式因无必要,一般不用(byng)。要注意的是,不同方式的参数(不同方式的返回值也类同)在函数的传递调用中系统将视为不同的数据类型,如定义有函数f1(int x),第5页/共68页第六页,共68页。7 在函数f1()中又要调用函数f2(),如果函数f2()的定义是f2(const int x),系统将视int和constint为不同的数据类型,从而告知用户数据类型不匹配。int和int&的情况也一样。注意到这一
5、点将可免去许多程序调试中的问题。例12函数参数(cnsh)的值参数(cnsh)、引用参数(cnsh)和 常 值 引 用 参 数(cnsh)三种方式。int example1(int a,int b,int c)/值参数(cnsh)方式 int x,y,z;x=a;y=b;z=c;第6页/共68页第七页,共68页。8 a=2*a;b=2*b;c=2*c;/函数返回后对应实际参数(cnsh)的值不变 return(x+y+z)/3;int example2(int&a,int&b,int&c)/引用参数(cnsh)方式 int x,y,z;x=a;y=b;z=c;a=2*a;b=2*b;c=2*c
6、;/函 数 返 回 后 对 应 实 际 参 数(cnsh)的值改变 return(x+y+z)/3;第7页/共68页第八页,共68页。9 int example3(const int&a,const int&b,cons tint&c)/常值引用(ynyng)参数方式 return (a+b+c)/3;/不允许改变常值引用(ynyng)参数a,b,c的值 第8页/共68页第九页,共68页。10 引用参数(cnsh)的方法是在类型名后加符号&,常值引用参数(cnsh)的方法是在引用参数(cnsh)方法的基础上再在函数定义行的最前边加保留字const。对 于 example1的 值 参 数(cns
7、h)方式,在运行时,对应的实际参数(cnsh)的值拷贝给形式参数(cnsh),当函数终止时,形式参数(cnsh)的 值 不 拷 贝 回 实 际 参 数(cnsh)。因 此,值 参 数(cnsh)方式的函数调用不会改变对应形式参数(cnsh)的实际参数(cnsh)的值。第9页/共68页第十页,共68页。11 1.1.4成员函数返回值 和 函 数 参 数 的 方 式(fngsh)类同,成员函数返回值也有值方式(fngsh)、常值方 式(fngsh)、引 用 方 式(fngsh)和 常 值 引 用 方 式(fngsh)等四种方式(fngsh)。当成员函数的返回值为值方式(fngsh)时,允许改变该对
8、象的私有成员数据。注意,成员函数的返回值为无const标识符的任何数据类型(包括void类 型)时 即 为 值 方 式(fngsh)。第10页/共68页第十一页,共68页。12例例1313成员函数返回值的值方式成员函数返回值的值方式(fngsh)(fngsh)和常值方式和常值方式(fngsh)(fngsh)include include class Temperatureclass Temperature private:private:float high Temp /float high Temp /最高温度最高温度 float low Temp;/float low Temp;/最低温度
9、最低温度第11页/共68页第十二页,共68页。13public:public:Temperature(float h,float l)high Temp=h;lowTemp=l;Temperature(float h,float l)high Temp=h;lowTemp=l;void Update Temp(float temp);void Update Temp(float temp);/成员函数成员函数(hnsh)(hnsh)返回值为值方式返回值为值方式 float GetHigh Temp(void)const;float GetHigh Temp(void)const;/成员函数成员
10、函数(hnsh)(hnsh)返回值为常值方式返回值为常值方式 float GetLowTemp(void)const;float GetLowTemp(void)const;/成员函数成员函数(hnsh)(hnsh)返回值为常值方式返回值为常值方式 ;void Temperature:Update Temp(float temp)void Temperature:Update Temp(float temp)第12页/共68页第十三页,共68页。14 if(temphighTemp)highTemp=temp;/允许更改(gnggi)私有数据 if(temp,cout和cerr对象屏幕输出的操
11、作符为。第17页/共68页第十八页,共68页。19includeinclude void main(void)void main(void)char c;char c;int n;int n;cout coutn;cinn;coutn=nendl;coutn=nendl;第18页/共68页第十九页,共68页。20 1.2.2文件输入输出 调用打开文件函数时,打开文件函数的参数包括文件名 和 数 据 流 动 的 方 向(fngxing),打开文件函数返回文件的开始地址。系统在存储文件时,在其末尾添加有文件结束标记,这样打开文件函数就具体地指定了一个文件在内存中的起始位置、结束位置和数据流动的方向
12、(fngxing)。fstream.h流类中定义了文件输入类和文件输出类。文件输入类的类名为ifstream,文件输出类的类名为ofstream。第19页/共68页第二十页,共68页。21includeincludeincludeincludeinclude /include /包含包含exit()exit()函数函数(hnsh)(hnsh)void main(void)void main(void)ifstream fin;/ifstream fin;/定义定义finfin为为ifstream ifstream 类的对象类的对象 ofstream fout;/ofstream fout;/定
13、义定义foutfout为为ofstreamofstream类的对象类的对象 fout.open(exam.dat,ios:out);/fout.open(exam.dat,ios:out);/建立输出文件建立输出文件exam.datexam.dat第20页/共68页第二十一页,共68页。22 /输输出出字字符符串串wangwang和和数数字字5050到到输输出出文文件件(wnjin)exam.dat(wnjin)exam.dat中中(可打开该文件(可打开该文件(wnjin)(wnjin)查看)查看)char namechar name=wang,name2=wang,name21010;int
14、 age=50,age2;int age=50,age2;foutnameendl;foutnameendl;foutageendl;foutageendl;fin.open(exam.dat,ios:in|ios:nocreate);fin.open(exam.dat,ios:in|ios:nocreate);/打开输入文件打开输入文件(wnjin)exam.dat(wnjin)exam.datif(!fin)if(!fin)第21页/共68页第二十二页,共68页。23 cerr不能打开(d ki)文件exam.datname2cage2;/屏幕输出查看coutname2=name2endl
15、;coutage2=ageendl;第22页/共68页第二十三页,共68页。241.3 类类 当开发的应用程序的数据类型不是int、float、char等系统支持的基本数据类型时,开发者就需定义自己的数据类型。C+中定义自己的数据类型的面向对象方法(fngf)是使用类。类是C+支持面向对象程序设计的基础。C+中定义类使用标识符class,类定义包括类中数据的定义和成员函数的定义。第23页/共68页第二十四页,共68页。25 例14设计一个人民币类,其方法包括(boku)设置、加(+)、加等于(+=),以及输出流操作,并用一个主函数验证。include include enum signminu
16、s,plus;/正负数的符号标识类Money定义部分 class Money /类Money定义第24页/共68页第二十五页,共68页。26 friend ostream&operator(ostream&out,constMoney&x);friend ostream&operator99)if(c99)第26页/共68页第二十七页,共68页。28 cerr cerr分必须小于等于分必须小于等于99endl;9999)if(c99)cerr cerr分必须小于等于分必须小于等于99endl;99endl;第27页/共68页第二十八页,共68页。29 exit(1);exit(1);amoun
17、t=d*100+c;amount=d*100+c;if(s=minus)amount=-amount;if(s=minus)amount=-amount;return true;return true;Money Money:operator+(const Money&x)const Money Money:operator+(const Money&x)const /操作符操作符+重载重载(zhn(zhn z z i)i)Money y;Money y;y.amount=amount+x.amount;y.amount=amount+x.amount;return y;return y;第2
18、8页/共68页第二十九页,共68页。30ostream&operator(ostream&out,const Money&x)ostream&operator(ostream&out,const Money&x)/流类的操作符重载。流类的操作符重载。前边不再需标识符前边不再需标识符friendfriend Money temp=x;Money temp=x;/注意临时注意临时(ln sh)(ln sh)对象对象temptemp绝对不能定义为引用型绝对不能定义为引用型 if(x.amount 0)if(x.amount 0)cout -;cout -;temp=-temp;/temp temp=
19、-temp;/temp为为x x的绝对值的绝对值 long d=temp/100;/d long d=temp/100;/d为为amountamount的元值的元值第29页/共68页第三十页,共68页。31out out¥d .;d .;int c=temp-d*100;/c int c=temp-d*100;/c为为amountamount的分值的分值 if(c 10)out 0;if(c 10)out 0;/分值小于分值小于1010时在十位上添时在十位上添0 0 out c;out c;return out;return out;/主函数主函数(hnsh)(hnsh)部分部分 void m
20、ain(void)void main(void)Money g,h(plus,3,30),hg;Money g,h(plus,3,30),hg;第30页/共68页第三十一页,共68页。32g.Set(minus,2,25);g.Set(minus,2,25);hg=h+g;/h hg=h+g;/h和和g g的值均不变的值均不变 g+=h;/g g+=h;/g的值被改变的值被改变 cout h+g=hg endl;cout h+g=hg endl;cout g=g endl;cout g=g endl;程序运行输出:程序运行输出:h+g=h+g=¥1.051.05 g=g=¥1.051.05 下
21、下面面我我们们对对C+C+类类基基本本要要素素的的分分析析讨讨论论(t(t oln)oln)将将以以例例1414为实例。为实例。第31页/共68页第三十二页,共68页。33 1.3.1 类的存取权限 类的数据和成员函数的存取权限分为三种(sn zhn):私有(private)、公有(public)和保护(protected)。在private域中,声明的数据和成员函数构成类的私有部分,私有部分中的数据和成员函数只能由该类对象的成员函数,以及被声明为友元的函数或声明为友元的类的对象的成员函数访问。第32页/共68页第三十三页,共68页。34 在public域中,一般仅声明类的成员函数(有些情况下
22、,也在此域中声明类的数据)。在public域中,声明的类的数据和成员函数构成类的公有部分;公有部分中的数据和成员函数既允许(ynx)该类对象的成员函数访问,也允许(ynx)程序中其他函数或其他类的对象的成员函数访问。因此,一个类的公有部分就构成了这个类的操作界面。外部函数和别的对象通过操作界面对类中的对象进行操作。这就和基本数据类型中int类数据均通过加(+)、减(-)、乘(*)、除(/)等操作界面来对该数据类型中所有数据进行操作一样。第33页/共68页第三十四页,共68页。35 1.3.2 构造函数和析构函数 构造函数是一种特殊的成员函数。构造函数是用来在内存中建立类的具体对象(即在内存中为
23、该对象分配(fnpi)适当的空间)并对其进行初始化赋值的成员函数。构造函数的名字必须和类的名字相同,构造函数没有返回值。构造函数允许参数有默认值,当构造函数有默认值时,若定义该类的对象时没有给出初始化值则按默认值处理。例14中对象h有初始化值(plus,3,30),对象g和hg没有初始化值,因此对象g和 hg的 初 始 化 值 为 默 认 值(plus,0,0)。一个类允许有多个构造函数。当一个类有多个构造函数时,系统将根据定义对象时的参数类型和参数个数,选择恰当的构造函数来建立对象和对该对象进行初始化。第34页/共68页第三十五页,共68页。36 析构函数是一种当对象被取消时才被自动调用的特
24、殊函数。当一个对象被取消时,析构函数提供了自动释放由构造函数在内存中建立的该类对象的内存区。析构函数的名字是在类的名字前面加上前缀(qinzhu)“”,析构函数没有返回值。由于在一般情况下建立的对象当被取消时,系统都能自动识别出所占用的相应的内存区,所以一般情况下析构函数的函数体为空。函数体为空的析构函数可省略。但当对象被取消时系统不能自动识别出所占用的内存区的类,析构函数的函数体就不能为空,此时析构函数就要负责释放对象所占用的内存区。每个类只能有一个析构函数。第35页/共68页第三十六页,共68页。37 1.3.3 操作符重载 当所设计类的某个成员函数功能和人们熟悉的某个有固定操作符的函数功
25、能类同时,可以用该操作符替换该成员函数名,这称作操作符重载。操作符重载时,操作符前使用标识符operator。对用户来说,操作符重载使类的成员函数的调用更加方便。如例1-4中的加(+)和加等于(+=)成员函数通过(tnggu)操作符重载方便了用户的调用。也就是说,一个类成员函数的操作符重载就是用一个有固定含义的操作符定义和实现该类的相应成员函数。第36页/共68页第三十七页,共68页。38 当调用(dioyng)时该操作符可以看成是该操作符左边对象的成员函数。如例14中的 g+=hg可 看 作 是 加 等 于(+=)成员函数的对象,h可看作是加等于(+=)成员函数的参数。操作符重载不仅可以更方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 基础
限制150内