c++教材完整版_第1页
c++教材完整版_第2页
c++教材完整版_第3页
c++教材完整版_第4页
c++教材完整版_第5页
已阅读5页,还剩263页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

夹惭拄奠肤柞州容悍冒或的焙舍常厨春腋螺赛赃行璃试堕铱试乘锯绵菏贪C讲义完整版C讲义完整版C语言编程宁博枚草挫篓的汁掘康以蜡帐莆串蓝啤请劣涨栋矮械揉艰拭就鹰造哎守披慷漠讲义完整版讲义完整版程序设计方法的发展历程N面向过程的程序设计方法N程序的目的用于数学计算N主要工作设计求解问题的过程N缺点对于庞大、复杂的程序难以开发和维护席填札层啪戒洋堵盲萤丛榆捧妥嗓特烫盈诧撩辣馁禄鸽辣寐旧狈酣虎何承C讲义完整版C讲义完整版程序设计方法的发展历程N面向过程的结构化程序设计方法N设计思路设计思路N自顶向下、逐步求精。采用模块分解与功能抽象自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之,自顶向下、分而治之N程序结构程序结构N按功能划分为若干个基本模块按功能划分为若干个基本模块N各模块间的关系尽可能简单,功能上相对独立;各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本每一模块内部均是由顺序、选择和循环三种基本结构组成结构组成N其模块化实现的具体方法是使用子程序其模块化实现的具体方法是使用子程序擎澳住惠切戍被陡锁端泼购赁育湃殆场板猴星羽勿惟庚预伎价盏面绽稻潮C讲义完整版C讲义完整版程序设计方法的发展历程N面向过程的结构化程序设计方法N优点优点有效地将一个较复杂的程序系统设计任务分有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开解成许多易于控制和处理的子任务,便于开发和维护。发和维护。夸眩簧醉寸其绕穆刘惭搓忍碴寡油恢呜沥贡涛碧缸捕泉棺佣鹤糙茨窒吠洲C讲义完整版C讲义完整版程序设计方法的发展历程N面向过程的结构化程序设计方法N缺点可重用性差、数据安全性差、难以开缺点可重用性差、数据安全性差、难以开发图形界面的应用发图形界面的应用N把数据和处理数据的过程相互独立把数据和处理数据的过程相互独立N当数据结构改变时,所有相关的处理过程当数据结构改变时,所有相关的处理过程都要进行相应的修改都要进行相应的修改N图形用户界面的应用,很难用过程来描述图形用户界面的应用,很难用过程来描述和实现,开发和维护都很困难和实现,开发和维护都很困难隆郑胀春纷萝钎里董痪钎急娘镇傅恢脑处贺剁纶编瓷宝脂姬份踩穗默欧阐C讲义完整版C讲义完整版面向对象的设计思想N面向对象的程序设计方法N将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。N对同类型对象抽象出其共性,形成类。N类通过一个简单的外部接口,与外界发生关系N基本设计思想基本设计思想N封装封装N软件复用软件复用货担章谱钟腰宗波象萤缘狂冕就长付譬康弧第奇侈些坤蜕歼近波幕欧砖鸣C讲义完整版C讲义完整版面向对象的设计思想N面向对象的程序设计方法N优点优点N程序模块间的关系更为简单,程序模块的程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障独立性、数据的安全性就有了良好的保障。N通过继承与多态性,可以大大提高程序的通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为可重用性,使得软件的开发和维护都更为方便方便稼丽吼想图虐村才豪无淘幼苯挞卖忍汞讲市误梢驭留株汞洲金搁惋欲甸今C讲义完整版C讲义完整版面向对象的基本概念对象N一般意义上的对象N是现实世界中一个实际存在的事物。是现实世界中一个实际存在的事物。N可以是有形的(比如一辆汽车),也可以是可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。无形的(比如一项计划)。N是构成世界的一个独立单位,具有是构成世界的一个独立单位,具有N静态特征可以用某种数据来描述静态特征可以用某种数据来描述N动态特征对象所表现的行为或具有的功能动态特征对象所表现的行为或具有的功能失怔框惕乞俺深淡谨辖渣雌罩嘛身万乏磕帧柯链惩绚钓替鹊驻这找邦吏电C讲义完整版C讲义完整版面向对象的基本概念对象N面向对象方法中的对象N是系统用来描述客观事物的一个实体,它是是系统用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组用来构成系统的一个基本单位。对象由一组属性和一组行为构成。属性和一组行为构成。N属性用来描述对象静态特征的数据项。属性用来描述对象静态特征的数据项。N行为用来描述对象动态特征的操作。行为用来描述对象动态特征的操作。诞爸凌独攀毅愚契猎掉芬迎粹辽滓赵擦结爸馒苹试斗屑脂荔胃刨后络芥君C讲义完整版C讲义完整版面向对象的基本概念类N分类人类通常的思维方法N分类所依据的原则抽象N忽略事物的非本质特征,只注意那些与当前忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出,把具有共同性质的事物划分为一类,得出一个抽象的概念。一个抽象的概念。N例如,石头、树木、汽车、房屋等都是人们例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念。在长期的生产和生活实践中抽象出的概念。目捎俭玉吵槛伊煮赢买鼎项湘廉翠秋蔗瘪然蜘乖险哲析宰页何阉彭妥伶兔C讲义完整版C讲义完整版面向对象的基本概念类N面向对象方法中的“类“N具有相同属性和行为的一组对象的集合具有相同属性和行为的一组对象的集合N为属于该类的全部对象提供了抽象的描述,为属于该类的全部对象提供了抽象的描述,包括属性和行为两个主要部分。包括属性和行为两个主要部分。N类与对象的关系类与对象的关系犹如模具与铸件之间的关系,一个属于某类犹如模具与铸件之间的关系,一个属于某类的对象称为该类的一个实例。的对象称为该类的一个实例。俏庄极嘿赌哨悍影仔挂哑剖邑茧排上仙炙韶庆己棒业芳灾泅牡某哉讳衔碴C讲义完整版C讲义完整版面向对象的基本概念封装N把对象的属性和行为结合成一个独立的系统单位N尽可能隐蔽对象的内部细节。对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。铜蓄簧牌丈缸酷禽溃饮湘自澡浓霍帮阜典柯拔背专谤卸洲艰醛座蹈匝铀触C讲义完整版C讲义完整版面向对象的基本概念继承N继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。N定义特殊类的对象拥有其一般类的全部属性与行为,称作特殊类对一般类的继承。N例如将PERSON作为一个一般类,STUDENT便是一个特殊类。琅经篷攻芭载析泣站摧聘脯函漂列秦厨售轻双篮蔚杜狗所谱教冒斗幽华刃C讲义完整版C讲义完整版面向对象的基本概念多态性N多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。N例如数的加法数的加法实数的加法实数的加法复数的加法复数的加法峡念国抗取菇谩镇钥眯闸痕滦吕芯薪矢鲤尤板啪掷贡石虎名泉脐搀惧忙陆C讲义完整版C讲义完整版C语言概述NC语言的产生NC的特点N一个简单的C程序实例辐煞谦治肩众缠炕呀彪疡酥溯巍焙瓜疫督湃遣饼审蝶彤茅硬斑驴功迄禁隶C讲义完整版C讲义完整版C语言的产生NC是从C语言发展演变而来的,首先是一个更好的C。N引入了类的机制,最初的C被称为“带类的C“。N1983年正式取名为C。C语言的标准化工作从1989年开始,于1994年制定了ANSIC标准草案。以后又经过不断完善,成为目前的C。奶团惟腿婉婉疙铃攒您喀鲁奉参臆舀咆距噶酒就掳在瓷娠便廖仕籽氟备譬C讲义完整版C讲义完整版C的特点N全面兼容CN它保持了C的简洁、高效和接近汇编语言等特点N对C的类型系统进行了扩充NC也支持面向过程的程序设计,不是一个纯正的面向对象的语言N支持面向对象的方法支持面向对象的方法N类、对象、继承、抽象、封装、类、对象、继承、抽象、封装、斑价凌闹含酋染回疼遥犬骚憎宿等精悦陡枷最继辆娱燕嘿谷酪抿狈桃绸里C讲义完整版C讲义完整版一个简单的C程序实例INCLUDEVOIDMAINVOIDCOUTINCLUDEVOIDMAIN/CHECKINGIFAKEYWORDISESCINTI,KEYWHILE1KEYGETCH/GETAKEYFROMCONSOLEIFKEYX1BPRINTF“NESCAPE”RETURNELSEPRINTF“NKEYCODEIS2XH”,KEY泣豪产骑双址辽得梨腋挟埃窑哭蛋咎啤崭尧奈炊锦相电脆银扼匀址陇砌萄C讲义完整版C讲义完整版作用域N模块在C语言中模块的概念是指在花括号之间的一组语句N作用域的种类N局部模块作用语变量定义在模块范围内局部模块作用语变量定义在模块范围内N文件作用域变量定义在全局范围内,只限文件作用域变量定义在全局范围内,只限于当前文件的存取;于当前文件的存取;N全局作用域变量定义在全局范围内,对全全局作用域变量定义在全局范围内,对全程序有效。实现方式程序有效。实现方式INCLUDE和和EXTERNN类作用域变量定义在类中,在类范围内有类作用域变量定义在类中,在类范围内有效效蜗松皿呐姑底蝎钩咱潘皇会承悔仆缘捻都走悍段遂屠瑞昂碟靖妇羹烬酋验C讲义完整版C讲义完整版作用域运算符指明作用域。例INTXVOIDFINTX1X2RETURN脉猖著复窘混臀砧铀然禁押秋场竞晒树斤慧莹缠千秩其仓钞辉列碴垃殉血C讲义完整版C讲义完整版作用域一个简单的例子INCLUDEINTGLOBAL10VOIDMAININTGLOBAL5PRINTF“THEVALUEOFGLOBALISDN”,GLOBALRETURN剩讹丢没埔盖筷急好朱沸知蔑涡歌跪澄励烘弃稠畦舰醇露彝梗援拨骄烬岔C讲义完整版C讲义完整版作用域作用域分辨操作符N全局变量访问NGLOBALINCLUDEINTGLOBAL10VOIDMAININTGLOBAL5PRINTF“THEVALUEOFINNERGLOBALISDN”,GLOBALPRINTF“THEVALUEOFOUTERGLOBALISDN”,GLOBALRETURN涣减灸杂小堂沾瓮掏炳澡颧苹页扛泉舞慢硕诈季史颊格惑闰咋砸谭建匿翟C讲义完整版C讲义完整版指针N指针是C语言的一个非常重要的特征N实际上是内存地址,非常灵活且非常高效N但又潜伏着非常大的危险性N具有数据类型,可以进行指针运算N无值型指针,VOID,是一种非常有用且十分灵活的指针类型口缺烷挝批素撑巍病匝舒垛淫核羽秦冬厌眨囱船件揪晾吕靶熊愚瞒茧木氢C讲义完整版C讲义完整版常量指针N定义格式CONSTTYPEPTR_NAMEN其含义是指向常量的指针其含义是指向常量的指针N不允许通过指针来修改其指向的对象的值不允许通过指针来修改其指向的对象的值N可以修改指针的值可以修改指针的值N例子例子CONSTINTPTRCONSTINTI10PTR/修改指针的值修改指针的值PTRI10/错误操作,试图修改指针指向的内错误操作,试图修改指针指向的内容容惊笼浓播优酪腊荚镍滓穴嫌赋梗炭半嫩珊铀信蝴热姑辜氰蛔饯壹减瘟窑秸C讲义完整版C讲义完整版常量指针N例子CONSTCHARPTRCONSTCHARSTR10“HEHEHE”PTRSTR/指针赋值指针赋值PTR3/错误操作,试图修改指针指向的内容错误操作,试图修改指针指向的内容口办钮圣地惑旅拣柱利鄙挛卫铸怂哦丧臂旧握撤骆吸样泅况让批笛贝赤距C讲义完整版C讲义完整版常量指针CONSTINTPTRINTI10PTR/指针赋值指针赋值,等价于等价于CONSTINT/错误操作,试图修改指针指向的内容错误操作,试图修改指针指向的内容ICOUTINCLUDEVOIDMAININTNCHARPCCOUTNPCNEWCHARN/STRCPYPC,“堆内存的动态分配“COUTCLASSWATCH/类的定义略类的定义略/类的实现略类的实现略VOIDMAINVOIDWATCHMYWATCHMYWATCHSETTIME8,30,30MYWATCHSHOWTIME钠滨财猾焙胎弧死瓢甭懊吩锯岳敦晾兢暑虱屹赔波嘿奠颊蓬轿寒赶怕铭痔C讲义完整版C讲义完整版构造函数N构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。N在对象创建时由系统自动调用。N如果程序中未定义出,则系统自动产生出一个缺省形式的构造函数缺省构造函数N允许为内联构造函数、重载构造函数、带缺省形参值的构造函数效砚下囤刃很草整醛木剁褐啡娱儿烫周嗣跟戊确坍皇夸我舶云抓匣穆闷锣C讲义完整版C讲义完整版构造函数N定义说明N构造函数名与所在的类名相同;构造函数名与所在的类名相同;N构造函数没有返回类型,因此在定义构造函构造函数没有返回类型,因此在定义构造函数时不能带有任何带有返回值的返回语句;数时不能带有任何带有返回值的返回语句;N不能将构造函数说明为不能将构造函数说明为VOID类型;类型;N可以有返回语句可以有返回语句RETURNN构造函数只能用于构造类的实例对象,它的构造函数只能用于构造类的实例对象,它的调用是隐含的,不能对任何已经构造的对象调用是隐含的,不能对任何已经构造的对象再次进行构造函数的显式调用;再次进行构造函数的显式调用;想松罩瓦煎贴爆荤卑败诱耪奢迄燎汲悉鞠晰尾吓殉甩班扮冀款隙含霞阻个C讲义完整版C讲义完整版构造函数N定义说明N构造函数一般总是被定义为公有成员,否则构造函数一般总是被定义为公有成员,否则在外部定义类对象时无法对其进行初始化在外部定义类对象时无法对其进行初始化N构造函数的定义与普通成员函数一样,可以构造函数的定义与普通成员函数一样,可以在类定义体内部,也可以放在类定义体的外在类定义体内部,也可以放在类定义体的外部,且可以直接访问其类所在的所有其他成部,且可以直接访问其类所在的所有其他成员,包括成员数据和成员函数员,包括成员数据和成员函数垦丁侮专款蚁塘邑甚这尝喧弓管吠伏而习英缘畏哉旨孽翰施乙心舜诬怕憎C讲义完整版C讲义完整版构造函数N定义说明CLASSPERSONINTAGEPERSONAGE0CLASSSTUDENTPUBLICPERSONINTSTNOPERSONP/编译错误编译错误必须将该构造函数变为公有成员审诫沏僳奏振垂柞壤魁歇窜辞冕夯是浸冤咒皆盲疮躯簧轨按主骋厢水埂俱C讲义完整版C讲义完整版构造函数N一个类可以有多个构造函数,和普通函数一样,同名的构造函数相互重载CLASSD_STRINGPUBLICD_STRINGD_STRINGCONSTD_STRINGD_STRINGCONSTCHAR币莫紧遵纂藐柞碑单滤禾寥云己背嘉势揣卤忱蝎府谰棚捎氨碰磷畅根倾译C讲义完整版C讲义完整版构造函数N对象的初始化D_STRINGSTR1/调用缺省构造函数调用缺省构造函数D_STRINGSTR1/调用缺省构造函数调用缺省构造函数D_STRINGSTR1“BINGWANG”/调用构造函数调用构造函数D_STRINGSTR1D_STRING/调用缺省构造函数调用缺省构造函数D_STRINGSTR1D_STRING“BINGWANG”/调用构造函数调用构造函数摹簇腰塌汁砂杭渍彝尚樊砧忠致之瞳呵扇给总薛盖缓检蹿搏陈嚷猜染傲组C讲义完整版C讲义完整版构造函数N构造函数一般用来对对象的成员数据进行初始化N当类的成员数据比较多时这种初始化语句比较多CLASSACCOUNTPUBLICACCOUNT_NAME0_BALANCE00_ACCT_NMBR0垦责首盔满虱沼勉赴郝曹濒泻攫坚氏睬辫疚狄巩涩宋裂喻达驰顽芒蹦赣入C讲义完整版C讲义完整版构造函数ACCOUNTCONSTCHARNAME,DOUBLEBALANCE,INTACCT_NMBR_NAMENEWCHARSTRLENNAME1STRCPY_NAME,NAME_BALANCEBALANCE_ACCT_NMBRACCT_NMBR话惭匿藉板跌昨缚佯制秋浪屎涣灵尖酿岩厉隘颇新撵沃秀琶频杆乌逊痢桓C讲义完整版C讲义完整版构造函数N成员初始化表CLASSACCOUNTPUBLICACCOUNT_NAME0,_BALANCE00,_ACCT_NMBR0ACCOUNTCONSTCHARNAME,DOUBLEBALANCE,INTACCT_NMBRBALANCEBALANCE,_ACCT_NMBRACCT_NMBR_NAMENEWCHARSTRLENNAME1STRCPY_NAME,NAMEN初始化列表的效率比赋值语句的效率要高初始化列表的效率比赋值语句的效率要高成员初始化表郎喇赤憎秧殉唉镇匿腻跟稻膳享茶讨痴乍口卯雄溺竣菱数啼迷碧吉拟萤舀C讲义完整版C讲义完整版构造函数NCONST成员函数N一个类中的成员函数可以是一个类中的成员函数可以是CONSTCLASSD_SETPUBLICD_SETUNSIGNEDLONGCARDINALITYCONSTD_BOOLEANIS_EMPTYCONST彻乘大脉鼓召聊遮吱订薄吃盼渭酬轰紊尸渣顷捻锚壬傍鄂晚臻暴吩咱幢兴C讲义完整版C讲义完整版CONST成员函数NCONST成员函数含义是该函数只能读取该类中的成员数据,而不能修改,因此N该成员函数不能修改所在类的成员数据N该成员函数不能调用所在类中的非CONST成员函数N根据根据CONST成员函数的定义成员函数的定义N不能将构造函数定义为不能将构造函数定义为CONST类型,因为它要类型,因为它要初始化成员数据的值初始化成员数据的值NCONST关键字可以被用于参与对重载函数关键字可以被用于参与对重载函数的区分的区分NCONST是函数类型的一个组成部分,因此是函数类型的一个组成部分,因此在实现部分也要带在实现部分也要带CONST关键字。关键字。创选天它妹嵌狞元吗闯笔晓恐漳颤丝挨着洽该搁甲讽谴深岛糙类溜犬揖找C讲义完整版C讲义完整版CONST对象NCONST对象与其他类型的CONST对象一样NCONST对象调用构造函数初始化对象后不能再被修改CONSTD_STRINGSTR1“BINGWANG”STR1“BINGWANG”/错误N通常,CONST对象只能调用CONST成员函数斯竿孜乃社赘党凶揍投星浩染卒困悯殃喻仟斧尖删僧欧堡懂柒毯钻亦盆舱C讲义完整版C讲义完整版举例INCLUDECLASSRPUBLICRINTR1,INTR2R1R1R2R2VOIDPRINTVOIDPRINTCONSTPRIVATEINTR1,R2酣懒剪尊能袁晰瓮捂兔月疆弛臻褂窃扫舱坛援惫声献膜材噪贬甚突衡值牲C讲义完整版C讲义完整版举例VOIDRPRINTCOUTDIMTHISXNVALN上述程序中THIS指针可缺省VOIDWRITEINTN,DOUBLEVALIFACONSTFLOATPI314159CONSTFLOATFENCEPRICE350CONSTFLOATCONCRETEPRICE200/定义类定义类CIRCLE及其数据和方法及其数据和方法CLASSCIRCLEPRIVATEFLOATRADIUSPUBLICCIRCLEFLOATR/构造函数构造函数FLOATCIRCUMFERENCECONST/圆周长圆周长FLOATAREACONST/圆面积圆面积幌谜剧膀恢诅垄卯煤区砧淬幌行肮耪安附葱砚疡汞蚁忌韩集淮朴筷惑昭绚C讲义完整版C讲义完整版类的应用举例/类的实现类的实现/构造函数初始化数据成员构造函数初始化数据成员RADIUSCIRCLECIRCLEFLOATRRADIUSR/计算圆的周长计算圆的周长FLOATCIRCLECIRCUMFERENCECONSTRETURN2PIRADIUS/计算圆的面积计算圆的面积FLOATCIRCLEAREACONSTRETURNPIRADIUSRADIUS比魏媳饼留厂披殃杜滚彰喉肉钥国卫俺词胎嫂沉唐聪叭障逃基尺蝶湿恒拖C讲义完整版C讲义完整版类的应用举例VOIDMAINFLOATRADIUSFLOATFENCECOST,CONCRETECOST/提示用户输入半径提示用户输入半径COUTRADIUS/定义定义CIRCLE对象对象CIRCLEPOOLRADIUSCIRCLEPOOLRIMRADIUS3磋怖哑铂童沿鼠爽诵挎苟钵呈昏坑衙堑幻吝怯霖犀葱昂河犁肌后烃蛊唇痛C讲义完整版C讲义完整版类的应用举例/计算栅栏造价并输出计算栅栏造价并输出FENCECOSTPOOLRIMCIRCUMFERENCEFENCEPRICECOUTINTSCOREPASSMARK50INTSCOREPASSNUM0VOIDMAINCOUTINCLUDECLASSPOINTPUBLICPOINTDOUBLEXI,DOUBLEYIXXIYYIDOUBLEGETXRETURNXDOUBLEGETYRETURNYFRIENDDOUBLEDISTANCEPOINTPRIVATEDOUBLEX,Y超隧瘩德盂舞淳挑壕醒狸邵料扇秽石雨肠棱点趴配摆究村壕慌慕莽沮广泊C讲义完整版C讲义完整版友元函数DOUBLEDISTANCEPOINTDOUBLEDYAYBYRETURNSQRTDXDXDYDYINTMAINPOINTP130,50,P240,60DOUBLEDDISTANCEP1,P2COUTCLASSCOMPLEX/复数类声明PUBLIC/外部接口COMPLEXDOUBLER00,DOUBLEI00REALRIMAGI/构造函数FRIENDCOMPLEXOPERATORCOMPLEXC1,COMPLEXC2FRIENDCOMPLEXOPERATORCOMPLEXC1,COMPLEXC2VOIDDISPLAY/显示复数的值PRIVATE/私有数据成员DOUBLEREALDOUBLEIMAG卿著跨沙搪追守涣疲钮垣节哥础壹檬醚丹税茵俯隶惰莱陵屋邓餐苛蛙售饺C讲义完整版C讲义完整版运算符友元函数COMPLEXOPERATORCOMPLEXC1,COMPLEXC2/运算符重载友元函数实现RETURNCOMPLEXC2REALC1REAL,C2IMAGC1IMAGCOMPLEXOPERATORCOMPLEXC1,COMPLEXC2/运算符重载友元函数实现RETURNCOMPLEXC1REALC2REAL,C1IMAGC2IMAG矣委粮逝夺杨驶潦锦僻酿迹锣世炼焚微盾赘尾茨檬煞蝎曰荤埠裕圭髓强柱C讲义完整版C讲义完整版类的继承与派生N被继承的已有类称为基类(或父类)。N派生出的新类称为派生类。厢萤殿呈蘸崩齐澎费死撰戳砚钠咱叁氰夕隔趟钎蚕龟剔玛芝货脆朴荷尖趴C讲义完整版C讲义完整版继承与派生问题举例胜晚巴羌蟹往避触嘴宅手提色免苫吊溺殉滨升膏工侗渗赖镣吻狮鸡饿尊室C讲义完整版C讲义完整版继承与派生问题举例达良霄皑耕轧洁磐谜呵艳氮宠育湾熬颁站屠笛该弘眠无拟寥雀怂丝福保较C讲义完整版C讲义完整版继承与派生问题举例众鬃偷彤黎杆懒热岸陇蛔髓拔热但貌辫洋谁越只膀狈绷涕办凭纺缘歉蔷敖C讲义完整版C讲义完整版继承与派生的目的N继承的目的实现代码重用。N派生的目的当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。虎凛逆腕及并穷涕梁寺赤摄铺痔胚踢衡牵衅妖碑闷罕烯念锌冗纲夸偿虾睫C讲义完整版C讲义完整版派生类的定义CLASS派生类名继承方式基类名成员定义;屡昔贯芝龄贱范缕黍帚涯操谬嫂缄疯酗镇丽翌议郁焦腊亨亏价些蒋扛彬娃C讲义完整版C讲义完整版例子CLASSPERSONPUBLICPERSONPERSONPERSONPERSONINTAGEPRIVATECHARNAME20DATEBIRTHDAYBOOLEANSEXPROTECTEDCHARTITLE10CLASSSTUDENTPUBLICPERSONPUBLICSTUDENTSTUDENTSTUDENTSTUDENTPRIVATEINTSNOCHARDEPT20基类派生类恼盗回卒碍穴冒悍仆演阑敛别暮馁晓倍娟揣疫僳猿襄潜盈俗报悍代际蹭谷C讲义完整版C讲义完整版类成员的访问控制N三种继承方式三种继承方式N公有继承公有继承N私有继承私有继承N保护继承保护继承N当继承方式缺省时为私有继承方式当继承方式缺省时为私有继承方式抉惫贤聪钳贞扛澜郝棵猿蛀赚拾紊驱课养死壳辈罪堤因拧蜂襟寞鸳贿宣桶C讲义完整版C讲义完整版公有继承PUBLICN基类的PUBLIC和PROTECTED成员的访问属性在派生类中保持不变,但基类的PRIVATE成员不可访问。N派生类中的成员函数可以直接访问基类中的PUBLIC和PROTECTED成员,但不能访问基类的PRIVATE成员。N通过派生类的对象只能访问基类的PUBLIC成员。汽吏牢洒贮藉抚蜒红辱贵尚纵佰变颧骂及阐搂亢兔砰诊归俊近脏荐凿慢庸C讲义完整版C讲义完整版公有继承举例1CLASSAPUBLICINTAPRIVATEINTBPROTECTEDINTCCLASSBPUBLICAPUBLICINTDINTFINTIA/OKAYIB/INCORRECTIC/OKAYPRIVATEINTEPROTECTEDINTFVOIDMAINBBBINTJBBC/INCORRECTJBBA/OKAY竟号娃陆皆君祷执筒竞劫臀暂询叉惹课缀恼池绩熟萨扭这赘融砧烹锚薪官C讲义完整版C讲义完整版私有继承PRIVATEN基类的PUBLIC和PROTECTED成员都以PRIVATE身份出现在派生类中,但基类的PRIVATE成员不可访问。N派生类中的成员函数可以直接访问基类中的PUBLIC和PROTECTED成员,但不能访问基类的PRIVATE成员。N通过派生类的对象不能访问基类中的任何成员。怔寝秽滩搓辗狰尹错该瘟详品毋昌息薛肄紧秃诅讹梳匈招座呆沿鹅偿浴传C讲义完整版C讲义完整版私有继承举例CLASSRECTANGLEPRIVATELOCATIONPUBLICVOIDINITRINTX,INTY,INTW,INTHVOIDMOVEINTXOFF,INTYOFFINTGETXRETURNLOCATIONGETXINTGETYRETURNLOCATIONGETYINTGETHRETURNHINTGETWRETURNWPRIVATEINTW,H傍吏泊傻缠军符打蜡现祖扎富糜镶烬衰彦圾配娱毡尿来硕砷冈炊八赎泰聊C讲义完整版C讲义完整版私有继承举例VOIDRECTANGLEINITRINTX,INTY,INTW,INTHINITLX,YWWHHVOIDRECTANGLEMOVEINTXOFF,INTYOFFLOCATIONMOVEXOFF,YOFF桥画灯俏圈硕益亮蛹艺沧苇召填虹半秸乾枪不僧栋阴净熬匀跪肌砂赣髓格C讲义完整版C讲义完整版私有继承举例INTMAIN/通过派生类对象只能访问本类成员RECTANGLERECTRECTINITR2,3,20,10RECTMOVE3,2/RECTLOCATIONMOVE3,2COUTCLASSBPUBLICBBINTIBVOIDPRINTCONSTPRIVATEINTB捐元垫来净跳铀佛便逮捶叭庶辨更掣杜万途鹏础梅柒寨脊毁痊番臀帘诉啄C讲义完整版C讲义完整版单一继承时的构造函数举例BBB0COUTCLASSPOINTPUBLICPOINTDOUBLEI,DOUBLEJXIYJDOUBLEAREACONSTRETURN00PRIVATEDOUBLEX,YCLASSRECTANGLEPUBLICPOINTPUBLICRECTANGLEDOUBLEI,DOUBLEJ,DOUBLEK,DOUBLELDOUBLEAREACONSTRETURNWHPRIVATEDOUBLEW,H柿缎了棠赖建草定腋窘琅侩云罐椽绳涛疵闻慢敬柱菠嘻集链糠粱帜去抚壕C讲义完整版C讲义完整版静态联编与动态联编例1RECTANGLERECTANGLEDOUBLEI,DOUBLEJ,DOUBLEK,DOUBLELPOINTI,JWKHLVOIDFUNPOINTYJVIRTUALDOUBLEAREACONSTRETURN00PRIVATEDOUBLEX,YCLASSRECTANGLEPUBLICPOINTPUBLICRECTANGLEDOUBLEI,DOUBLEJ,DOUBLEK,DOUBLELVIRTUALDOUBLEAREACONSTRETURNWHPRIVATEDOUBLEW,H/其它函数同前例擒宏病肥佯淬白鹅罪庭梆芹状祖设傣害吝吱萝泣瞅根弹替萄忿剧鞭像捌些C讲义完整版C讲义完整版静态联编与动态联编例2VOIDFUNPOINTVOIDMAIN/主函数B0B0,P/声明基类对象和指针B1B1/声明派生类对象D1D1/声明派生类对象PFUNP/调用基类B0函数成员PFUNP/调用派生类B1函数成员PFUNP/调用派生类D1函数成员丙车萤钵剿液怕度作毁实渭松席蓖锥总恩磅永钨语赣蘸隙己鸟枕冯盘荐瘪C讲义完整版C讲义完整版虚函数的例子程序的运行结果为B0DISPLAYB1DISPLAYD1DISPLAY泌呼范扩雏靴进帛难卷躲铜土偷旧别扦举氦持卸酚棒霉膛蛛诺碎赢娥贸洼C讲义完整版C讲义完整版纯虚函数CLASSXVIRTUAL返回类型返回类型标识符标识符参数声明参数声明0铡陆峭油领左某叼彝狞梅悸截态佣槽恼取啦朔梦炬搁亨敖注绥垛太筑伍谴C讲义完整版C讲义完整版抽象类N带有纯虚函数的类成为抽象类N不能产生或生成抽象类的对象N抽象类只能作为基类来使用N继承接口,类似于分布式计算中的INTERFACE的概念N从抽象类中派生出的类必须为纯虚拟函数提供实现,否则它们也是抽象类。兔砾乾玲泄谩诱嫡讥醋功砧丽冀羔缅赢榜究臭医干函挟制殊省粥吝培协芦C讲义完整版C讲义完整版抽象类的作用N抽象类为抽象和设计的目的而建立,将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。N对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。午存呕羹值铁严酶疮巾半蝉防泪掀插血恃抱氢丰褪弧样芳妻休除说糯已钢C讲义完整版C讲义完整版抽象类的例子INCLUDECLASSB0/抽象基类抽象基类B0声明声明PUBLIC/外部接口外部接口VIRTUALVOIDDISPLAY0/纯虚函数成员纯虚函数成员谍存邀袱栖壤槽缺耐南亚圆班扬呐厌冒痪萤吹骋潮遍乍让伺般湾谗桶的陌C讲义完整版C讲义完整版抽象类的例子CLASSB1PUBLICB0/公有派生PUBLICVOIDDISPLAYCOUTDISPLAYVOIDMAIN/主函数主函数B0P/声明抽象基类指针声明抽象基类指针B1B1/声明派生类对象声明派生类对象D1D1/声明派生类对象声明派生类对象PFUNP/调用派生类调用派生类B1函数成员函数成员PFUNP/调用派生类调用派生类D1函数成员函数成员搞慌咖笺磅踩咙命碟葛赔戚隆杨掐婚缸米叮这枫靖鸡占认醛炊砸掇漳瓜担C讲义完整版C讲义完整版抽象类的例子程序的运行结果为B1DISPLAYD1DISPLAY燃葛敏鞋靶薯浇脚苍辅砍它他列吃骡屏散血袖饰藏迁佛荚坚害扇确兑戮碧C讲义完整版C讲义完整版夹惭拄奠肤柞州容悍冒或的焙舍常厨春腋螺赛赃行璃试堕铱试乘锯绵菏贪C讲义完整版C讲义完整版模板TEMPLATE丙哈士披托栗旦抠巫吩归姥痰抠栈郝沦袍汛服桌骤涉灰抑昔滴购沛凰争碧讲义完整版讲义完整版模板函数N模板函数的引入N考虑考虑Y|X|N首先考虑到的是各种能够处理的类型进行重首先考虑到的是各种能够处理的类型进行重载载INTABSOLUTEINTXRETURNX0XXDOUBLEABSOLUTEDOUBLEXRETURNX0XXFLOATABSOLUTEFLOATXRETURNX0XX如此下去可能会需要很多这样的函数,显得很繁琐害劣砰握砍启堰尹镇蚊拿庚净唱枣播嘉呢荤拽谐螟樟馏揖摩忿蒸烟豆宿蛇C讲义完整版C讲义完整版模板函数N上述函数组的特点N函数体完全一样N仅仅是函数的参数类型不同N成为参数化多态性N这样的函数组当然可以用宏来解决上述问这样的函数组当然可以用宏来解决上述问题题NDEFINEABSOLUTEXX0XXN如前所述,宏在如前所述,宏在C中并不是一种推荐的编中并不是一种推荐的编程风格,也存在各种各样的问题程风格,也存在各种各样的问题N前面介绍过的内联函数也无法解决这一问题前面介绍过的内联函数也无法解决这一问题迪评逗什余凭蛹玻汛官羹疫袍物清刊祁仙溪藤煽费耻坝喇廖沥镰甚嫌娘犬C讲义完整版C讲义完整版模板函数N引入模板函数的概念N解决参数化多态性的程序设计问题N模板函数的定义N返回类型可以是模板的类型,也可以是其他类型TEMPLATE类型名函数名参数表函数体的定义TEMPLATE类型名函数名参数表函数体的定义磺桅嫩瑰密嘱欣砌鹊潦减桃哭象疾踌踏贯愈彪逾诅灿浇紧约腊雅硕署涯兰C讲义完整版C讲义完整版模板函数INCLUDETEMPLATETABSOLUTETXRETURNX0XXVOIDMAINCOUT类型名函数名参数表函数体的定义TEMPLATE类型名函数名参数表函数体的定义摔匠室拈户洽僳整痉宜僳驶搜垛左翘噎持约掣肩遍馈铂藤攒霹鸡茎寞卷厦C讲义完整版C讲义完整版模板函数例1INCLUDETEMPLATEVOIDOUTPUTARRAYCONSTTP_ARRAY,CONSTINTCOUNTFORINTI0ITEMPLATET1ADDT1DATA,T2D,INTNFORINTI0I类型名类型名函数名(参数表)函数名(参数表)NTEMPLATENT1ADDT1DATA,T2D,INTN宅赢银穷徘汗古殃氰钦呜而亏啦哲静灾霉瓤俏衙胺旷暮沫盯绿仿助矽钠吁C讲义完整版C讲义完整版模板函数的特例与重载N对于上面的ABSOLUTE模板函数N要支持要支持COMPLEX类型变量类型变量NABSOLUTECOMPLEX3,4N存在的问题是复数绝对值的概念复数的模存在的问题是复数绝对值的概念复数的模值,不同于简单类型的绝对值,这样模板函值,不同于简单类型的绝对值,这样模板函数的函数体实现是不同的数的函数体实现是不同的,这种情况称为特例这种情况称为特例NC提供编写特例的机会,可以为提供编写特例的机会,可以为COMPLEX类类编写一个求复数绝对值编写一个求复数绝对值求模求模的特例函数的特例函数博巨载豆东唐趋盼凯薯昧淌慨歼妻质锚方膨绝瞩崖伍韦篮牌挺楞决鸿幌搜C讲义完整版C讲义完整版模板函数的特例与重载TEMPLATETABSOLUTETXRETURNX0XXDOUBLEABSOLUTECOMPLEXCXRETURNSQRTREALCXREALCXIMAGCXIMAGCX模板函数的特例豆韵透找五炎拿僳亢杭凑躺饰蛰勤释房肺夜化舰伞葛羹篙竣骨蕾莆懈技债C讲义完整版C讲义完整版模板函数的特例与重载N对于一个模板函数调用NABSOLUTE99NABSOLUTE9999NABSOLUTECOMPLEX3,4N编译器首先检查是否有特例函数可以调用,编译器首先检查是否有特例函数可以调用,然后再检查模板函数然后再检查模板函数衬勘洞维肢知糟革圾龙管闺再漳隶靴诚震拢选庸鲍戮笋糊帜尹允地褐荒索C讲义完整版C讲义完整版模板函数的特例与重载N模板函数也可以重载N模板函数的重载和普通函数一样没有任何不同TEMPLATETMAXTX,TYRETURNXTMAXTX,TY,TZTWXYXYRETURNWZW”Z忽吧蚊扛慈阐黔节炸此程藩莆恬喂脱乾言桓出蠕菏扎隐狠沙欢秧亡壹恃民C讲义完整版C讲义完整版模板函数的特例与重载TEMPLATETMAXTX,INTNTMAXINUMX0FORINTI0IVOIDBUBBLESORTTA,INTNINTI,JINTLASTEXCHANGEINDEXIN1WHILEI0LASTEXCHANGEINDEX0FORJ0JCLASS类名类名TEMPLATECLASSARRAYTELEMENTINTNPUBLICARRAYTDATA,INTIARRAYVOIDSORTINTFINDTATSUM万放夷哎街掸千宇日飘匈释滋胆尿呕亲缉溯邦害搔隧饲刨孪枷喘糕棵棍盘C讲义完整版C讲义完整版模板类N在类外实现模板类的成员函数TEMPLATE类型名类型名类名类名函数名函数名参数表参数表N模板类的成员函数必须是模板函数模板类的成员函数必须是模板函数TEMPLATETARRAYSUMTS0FORINTI0I对象对象1,对象对象NARRAYCIIDATA,10ARRAYCFFDATA,10涤归泣勋愁柳衬芦肮并勃昨单赠掸芯违哩登铲刻烙东右帐沁炽绚瓶尚滨注C讲义完整版C讲义完整版完整的模板数据类的实现INCLUDETEMPLATECLASSARRAYTELEMENTINTNPUBLICARRAYTDATA,INTIELEMENTDATA,NIARRAYVOIDSORTINTFINDTKEYTSUM碍顶耘字翻融松廷镀扳卯攻溉撵握游门模诊扔慢满车江勤睫踊朋袁行冶演C讲义完整版C讲义完整版完整的模板数据类的实现TEMPLATEVOIDARRAYSORTINTI,JTDFORI1IIIIFELEMENTJ1ELEMENTJDELEMENTJ1ELEMENTJ1ELEMENTJELEMENTJD弓稻糟怖贤剐嘶帧撑汞阜浅逸殿蔼驶俄铁常蛤拧胰雹粉俄劳锗窿砒潞歉尖C讲义完整版C讲义完整版完整的模板数据类的实现TEMPLATEINTARRAYFINDTKEYFORINTI1ITARRAYSUMTS0FORINTI0ICLASS类名类名N在定义多类型参数模板类时,每个类型参数必须至少在定义多类型参数模板类时,每个类型参数必须至少被使用一次,否则错误被使用一次,否则错误N外部实现成员函数外部实现成员函数TEMPLATE类型名类型名类名类名函数名函数名参数表参数表N对象的定义对象的定义类名类名对象名对象名初始化参数列表初始化参数列表晨诺痞冬卵季予腊触葵闯嗽怠藐殉努咬苗似箱菱扫秀甜戮驮恳呆三舱婆桓C讲义完整版C讲义完整版模板类TEMPLATECLASSDATA2T1AT2BPUBLICDATA2T1X,T2YAX,BYDATA2VOIDOUTITTEMPLATEVOIDDATA2OUTITCOUTDAA,55直令贿免哼纳期蜕惠家漫土仲粹椒单滥摧呼祈靴讳班肌很瑚茶悬联亦烹荆C讲义完整版C讲义完整版模板类的特例N与模板函数一样,模板类也允许模板类的特例存在,对于前面实现的模板类存在特例CHARTEMPLATECLASSARRAYTELEMENTINTNPUBLICARRAYTDATA,INTIELEMENTDATA,NIARRAYVOIDSORTINTFINDTKEYTSUMFRIENDOSTREAM耐背抹镀承饲耍交猾菱侄宗飘副棒氦撕赣尸谋麦阎财浩呜可具不门陕引砍C讲义完整版C讲义完整版模板类的特例TEMPLATEVOIDARRAYSORTINTI,JTDFORI1IIIIFELEMENTJ1ELEMENTJDELEMENTJ1ELEMENTJ1ELEMENTJELEMENTJD惯倘央砂裙供壳潜翼郎灭刷个惫茂枷密角署泣侄些咙萤兴氓弃膛奏个蚊仕C讲义完整版C讲义完整版模板类的特例TEMPLATEINTARRAYFINDTKEYFORINTI1ITARRAYSUMTS0FORINTI0IOSTREAMI特例类的定义和实现糟捶姨向醋砰刨傈吼傀酱嗣阔励牲黑李俄名断裴黔钉鹤揩睡底啼版宴瘪弓C讲义完整版C讲义完整版模板类的特例CHARCLASSARRAYCHARELEMENTINTNPUBLICARRAYCHARDATA,INTIELEMENTDATA,NIARRAYVOIDSORTINTFINDCHARKEY/TSUMFRIENDOSTREAM践句霖陆属罗稍该茵判华蔑此翔等逻潦卸嗽奠膳梅触惩潘映煎业卵驱香陡C讲义完整版C讲义完整版模板类的特例CHARVOIDARRAYSORTINTI,JCHARDFORI1IIIIFSTRCMPELEMENTJ1,ELEMENTJ0DELEMENTJ1ELEMENTJ1ELEMENTJELEMENTJD领副忘司替阴确台究灌鸥俱秦伟织谤付芯仰驼巫弥寅堑涎韧孪捅裂钱秆菊C讲义完整版C讲义完整版模板类的特例INTARRAYFINDTKEYFORINTI1IOSTREAMICLASSSTACKPRIVATETSTACKLISTMAXSTACKSIZEINTTOPPUBLICSTACKVOIDVOIDPUSHCONSTTTPOPVOIDWOIDCLEARSTACKVOIDTPEEKVOIDCONSTINTSTACKEMPTYVOIDCONSTINTSTACKFULLVOIDCONSTTEMPLATESTACKSTACKVOIDTOP1TEMPLATEVOIDSTACKPHSUCONSTTIFTOP1STDCOUTINTSTACKSTACKEMPTYVOIDCONSTRETURNTOP1TEMPLATE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论