欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C大学基础教程第8章总结用.ppt

    • 资源ID:6503561       资源大小:206.50KB        全文页数:72页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C大学基础教程第8章总结用.ppt

    -1-,8.1 类是一种数据类型,数据类型约束了变量所能参加的运算范围。例如,整型变量可以进行取模“%”运算,而实型变量则不可以进行该运算;数据类型限定了变量所能取到的数值范围。例如,整型变量可以取值为1,2.,100,,而不能取值3.1415这样的实型数。在C+中,类实际上相当于一种用户自定义的数据类型,对象就是该数据类型的一个变量;类-数据类型 对象-变量,-2-,8.2 类的定义,一个类表示现实生活中的一类事物,比如“学生”.事物有相应的特征或属性,它们就是类的成员数据;事物可能有行为动作,也可能被某些行为动作所操作,这些都用函数来实现,是构成类的函数成员,或者叫成员函数。,-3-,8.2 类的定义,类的声明具体说明类的组成,声明类的语法形式为:class 类的名称public:公有成员数据;公有成员函数;protected:保护成员数据;保护成员函数;private:私有成员数据;私有成员函数;,-4-,其中,“成员”既可以是数据,也可以是函数。成员数据的声明方式与一般变量相同。成员函数是描述类的对象可以进行的操作,一般在类中声明原型,在类声明的外面定义函数的具体实现。,8.2 类的定义,-5-,类的成员函数描述的是类的行为或操作。函数的原型声明要在类的主体中,原型说明了函数的参数表和返回值类型。而函数的具体实现一般是写在类声明之外的。在类的外部定义成员函数的语法形式为:返回值类型 类名:成员函数名(参数表)函数体,8.2 类的定义,-6-,定义一个类后,只是有了描述该类事物的数据类型。当我们使用“类”这个数据类型定义一个变量时,就生成了一个该“类”的对象。对象有时又称为实例。例如,Student stu(1,“wang”,M);定义了一个对象名字为stu的Student类型的对象。,8.3 对象的定义,-7-,定义一个对象和定义一个一般变量相同。定义变量时要分配存储空间,同样,定义一个对象时要分配存储空间,一个对象所占的内存空间是类的数据成员所占的空间总和。类的成员函数存放在代码区。类的成员是抽象的,对象的成员才是具体的。类的数据成员都不会有具体的属性值。只有对象的成员才会有具体的属性值。,8.3 对象的定义,-8-,8.3 对象的定义,类中成员互访直接使用成员名类外访问使用“对象名.成员名”方式访问 public 属性的成员,-9-,类的成员函数可以有多种特殊形式,包括带默认参数值的成员函数、内联成员函数和重载成员函数。,8.4 类的成员函数,-10-,class Studentpublic:Student(int pId,char*pName,char pSex);/构造函数 void printStudent();/printStudent函数声明 void setNationality(char*pNationality);/设置国籍函数private:int id;/定义学号变量 char*name;/定义姓名字符指针变量 char sex;/定义性别变量 char*nationality;/定义国籍字符指针变量;,8.4.1 带默认参数值的成员函数,-11-,void Student:setNationality(char*pNationality=China)nationality=new charstrlen(pNationality)+1;if(nationality!=0)strcpy(nationality,pNationality);调用:Student stu(1,wang,M);stu.setNationality();,8.4.1 带默认参数值的成员函数,-12-,如果在类的内部定义成员函数的具体实现,则该成员函数为内联成员函数。函数定义时没有任何的附加说明,所以称为隐式声明的内联成员。,8.4.2 内联成员函数,-13-,8.4.2 内联成员函数,在类中说明原形,可以在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联成员函数。在类中声明内联成员函数的方式:将函数体放在类的声明中(隐式)。使用inline关键字(显示)。,-14-,class Studentpublic:void printStudent();/打印所有信息/根据flag取值打印不同信息/flag=1,打印id/flag=2,打印name/flag=3,打印sex/flag=4,打印nationalityvoid printStudent(int flag);private:;,8.4.3 重载成员函数,-15-,关键字public、protected、private说明类成员的访问控制属性。私有(private)成员只允许本类的成员函数来访问;公有(public)成员是类对外的接口,在类声明和类(函数)实现之后,外部对象可以访问公有成员。保护型(protected)成员的可访问性和私有成员的性质相似,与继承有关。,8.5 类成员的访问属性,-16-,关于访问控制属性,注意:在类声明中,三种访问控制属性,可以按任意次序出现,也可以不出现。public等关键字也可以多次出现,但是一个成员只能具有一种访问控制属性。如果不写访问控制属性关键字,默认的是private。在书写时通常习惯将public放在最前面,这样便于阅读,因为它们是外部访问时所要了解的。一般情况下,一个类的数据成员应该声明为私有成员,这样封装性较好。一个类应该有一些公有的函数成员,作为对外的接口,否则别的代码无法访问类,8.5 类成员的访问属性,-17-,8.5 类成员的访问属性,-18-,8.6 对象的使用,对象是类的一个具体的实例,类和对象的关系相当于普遍与特殊的关系。在C+中,类是一个自定义的数据类型,对象是该数据类型的一个变量。所以,可以定义一个全局的对象,也可以在函数体中定义一个局部的对象,或者动态地从堆中申请空间来创建一个对象,还可以定义对象数组,以及使用对象作为函数的参数与返回值。,-19-,8.6.1 对象指针,声明对象指针的一般语法形式为:类名*对象指针名;使用对象指针访问对象的成员,语法形式为:对象指针名-公有成员;例如:Clock c;Clock*pc1=new Clock;Clock*pc2=,-20-,8.6.2 this指针,问:一个类中所有对象调用的成员函数都执行同一段代码。那么,成员函数又是怎么识别当前是那个对象在访问呢?答:this指针指出了成员函数当前所操作的数据所属的对象。不同的对象调用成员函数时,this指针将指向不同的对象,也就可以访问不同对象的数据成员。,-21-,8.6.3 对象数组,对象数组的元素是对象,不仅具有数据成员,而且还有函数成员,可以通过数组元素调用成员函数。例:student stu10;,-22-,8.6.4 对象用做函数的参数和返回值,可以将对象作为参数传递给一个函数或从函数返回一个对象。直接用对象作为参数,调用函数时,进行值传递,实参的值要复制给形参,如果类的数据成员较多时,需要一一复制.但是,这种参数传递方式效率不高,可以使用对象指针或对象引用方式来传递函数参数。,-23-,8.7 构造函数,构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。在对象创建时由系统自动调用。如果程序中未声明,则系统自动产生出一个缺省形式的构造函数允许为内联函数、重载函数、带缺省形参值的函数,-24-,8.7 构造函数,class Clockpublic:Clock(int NewH,int NewM,int NewS);/构造函数 Clock()/缺省构造函数void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;,-25-,构造函数的实现:Clock:Clock(int H,int M,int S)Hour=H;Minute=M;Second=S;建立对象时构造函数的作用:void main()Clock c(0,0,0);/隐含调用构造函数,将初始值作为实参。c.ShowTime();,-26-,8.7 构造函数,每个对象区别于其他对象的地方主要有两个,外在的区别就是对象的标识符,即对象的名称,而内在的区别就是对象自身的属性值,即数据成员的值。在定义一个对象的时候要给它分配存储空间,也可以同时给它的数据成员赋初值,称为对象的初始化。C+程序中的对象初始化工作由一个特殊的成员函数来完成,就是构造函数。因为不同类型的对象的初始化工作是不一样的,因此构造函数从属于某个类的,即每个类都要定义它自己的构造函数,它是类的成员函数。,-27-,定义构造函数的一般形式为:class 类名 public:类名(形参表);/构造函数的原型/类的其它成员;类名:类名(形参表)/构造函数的实现/函数体,8.7 构造函数,-28-,构造函数的特点是:构造函数的函数名与类名相同;而且没有返回值。构造函数一定是公有函数。作为类的成员函数,构造函数可以直接访问类的所有数据成员。在类的内部定义的构造函数是内联函数。构造函数可以带默认形参值,也可以重载。,8.7 构造函数,-29-,在声明类时如果没有定义类的构造函数,编译系统就会在编译时自动生成一个默认形式的构造函数;默认构造函数是不提供参数的构造函数。,8.7 构造函数,-30-,8.8 析构函数,完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个缺省的析构函数。,-31-,构造函数和析构函数举例,#includeclass Point public:Point(int xx,int yy);Point();/.其它函数原形 private:int X,int Y;,-32-,Point:Point(int xx,int yy)X=xx;Y=yy;Point:Point()/.其它函数的实现略,-33-,与构造函数相反,当对象生存期结束时,需要调用析构函数,释放对象所占的内存空间。与构造函数一样,析构函数也是类的一个公有成员函数,它的名称是在类名前加“”构成,没有返回值,和构造函数不同的是析构函数不接受任何参数,析构函数是不可重载的。析构函数是在对象生存期即将结束的时刻由系统自动调用的。如果程序员没有定义析构函数,系统将自动生成和调用一个默认析构函数。,8.8 析构函数,-34-,拷贝构造函数就是函数的形参是类的对象的引用的构造函数。通过等于号复制对象时,系统会自动调用拷贝构造函数。如果程序在类定义时没有显式定义拷贝构造函数,系统也会自动生成一个默认的拷贝构造函数,把成员值一一复制。拷贝构造函数与原来的构造函数实现了函数的重载。,8.9 拷贝构造函数,-35-,以下三种情况系统会自动调用拷贝构造函数:当用类的一个对象去初始化该类的另一个对象时 如果函数的形参是类的对象,为值传递,调用函数时,进行形参和实参结合时 如果函数的返回值是类的对象,函数执行完成返回调用者时,8.9 拷贝构造函数,-36-,拷贝构造函数,拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。class 类名 public:类名(形参);/构造函数 类名(类名&对象名);/拷贝构造函数.;类名:类名(类名&对象名)/拷贝构造函数的实现 函数体,-37-,例 拷贝构造函数举例,当用类的一个对象去初始化该类的另一个对象时系统自动调用它实现拷贝赋值。void main(void)Point A(1,2);Point B(A);/拷贝构造函数被调用 coutB.GetX()endl;,-38-,拷贝构造函数举例,若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:void fun1(Point p)coutp.GetX()endl;void main()Point A(1,2);fun1(A);/调用拷贝构造函数,-39-,拷贝构造函数举例,当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:Point fun2()Point A(1,2);return A;/调用拷贝构造函数void main()Point B;B=fun2();,-40-,完成简单的一一对应的复制的拷贝构造函数称为浅拷贝。如果类的数据成员包括指针变量,类的构造函数用new运算符为这个指针动态申请空间。如果通过浅拷贝进行了对象的复制。最后,在退出运行时,程序会报错。这时需要用“深拷贝”的方式恰当定义类的拷贝构造函数。一般来讲,如果一个类需要析构函数来释放资源,则它也需要定义一个显式拷贝构造函数来实现深拷贝。,8.10 浅拷贝与深拷贝,-41-,静态成员,静态数据成员用关键字static声明该类的所有对象维护该成员的同一个拷贝必须在类外定义和初始化,用(:)来指明所属的类。静态成员函数类外代码可以使用类名和作用域操作符来调用静态成员函数。静态成员函数只能引用属于该类的静态数据成员或静态成员函数。,-42-,8.11.1 静态成员数据,静态成员数据是类的数据成员的一种特例,采用static关键字来声明。类的数据成员在类的每一个对象中分别存储不同的数值,但是静态成员数据则不同,它在整个类中只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。静态数据成员具有静态生存期。在类的声明中只能声明静态成员数据的存在。由于类的声明是抽象的,静态成员数据的初始化需要在类的外部进行,通过类名对它进行访问。,-43-,8.11.2 静态成员函数,可以通过定义和使用静态成员函数来访问静态数据成员。所谓静态成员函数就是使用static关键字声明函数成员。同静态数据成员一样,静态成员函数也属整个类,由同一个类的所有对象共同维护,为这些对象所共享。,-44-,8.11.2 静态成员函数,静态成员函数作为成员函数,它的访问属性可以受到类的严格控制。对公有静态成员函数,可以通过类名或对象名来调用;而一般的非静态公有成员函数只能通过对象名来调用。静态成员函数可以直接访问该类的静态数据成员和函数成员;而访问非静态数据成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。,-45-,8.12 友元,在程序设计中,将数据与操作数据的行为进行有机地结合,这就是封装。C+语言提供类实现封装,类是属性和操作的结合体,并且在定义类的属性和操作时,规定了它们的可见性。通过封装将一部分成员作为类与外部的接口,而将其它的成员隐藏起来,以防外界的干扰和误操作,使程序的不同模块之间的相互影响减小到最低限度。,-46-,8.12.1 友元函数,友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。访问对象中的成员必须通过对象名。,-47-,例.使用友元函数计算两点距离,#include#include class Point/Point类声明public:/外部接口Point(int xx=0,int yy=0)X=xx;Y=yy;int GetX()return X;int GetY()return Y;friend double Distance(Point,-48-,double Distance(Point,-49-,8.12.1 友元类,若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。声明语法:将友元类名在另一个类中使用friend修饰说明。,-50-,友元类举例,class A friend class B;public:void Display()coutxendl;private:int x;class B public:void Set(int i);void Display();private:A a;,-51-,void B:Set(int i)a.x=i;void B:Display()a.Display();,-52-,关于友元类,要注意:友元关系是不能传递的。B类是A类的友元,C类是B类的友元,C类和A类之间,如果没有声明,就没有任何友元关系,不能进行数据共享。友元关系是单向的。如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据。,8.13 常对象,-54-,8.13 常对象,定义对象时用const进行修饰,称为常对象,它的数据成员值在对象的整个生存期间内不能被改变。也就是说,常对象在定义时必须进行初始化,而且不能被更新。使用常量,既实现了数据共享、又可以保证数据不会被改变。,class A public:A(int i,int j)x=i;y=j;.private:int x,y;A const a(3,4);/a是常对象,不能被更新,8.14 常成员,-56-,8.14 常成员,对于类的某个成员函数,使用const关键字修饰,称为常成员函数。常对象只能调用常成员函数,保证常对象的数据成员不能被修改。使用const说明的数据成员称为常数据成员。如果在一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值。,常成员函数说明格式:类型说明符 函数名(参数表)const;1)const是函数类型的一个组成部分,因此在实现部分也要带const关键字。2)const关键字可以被用于参与对重载函数的区分3)常对象只能调用常成员函数;但是普通对象也可以调用常成员函数,使用const说明的数据成员。格式如下:const 类型说明符 数据成员名;,-57-,例 常成员函数举例,#includeclass R public:R(int r1,int r2)R1=r1;R2=r2;void print();void print()const;private:int R1,R2;,-58-,例 常数据成员举例,#includeclass Apublic:A(int i);void print();const int,-59-,8.14 常成员,常成员函数的特点:const是函数类型的一个组成部分,在函数实现时也要带const关键字。常成员函数不能更新对象的数据成员,也不能调用该类中的非常成员函数。常对象只能调用常成员函数,但是常成员函数也可以被普通对象来调用。const关键字可以被用于参与对重载函数的区分。,8.15 组合关系,-61-,8.15 组合关系,现实世界中对象与对象之间的整体-部分关系又称为组合关系。生活中有很多这方面的实例。例如,一辆汽车由四个车轮、一个方向盘和一个发动机等部件组成,一个桌子有一个桌面和四个桌腿组成。那么,汽车对象和车轮对象、方向盘对象以及发动机对象之间就构成了组合关系,桌子对象和桌面对象以及桌腿对象之间也构成了组合关系。,-62-,8.15 组合关系,-63-,8.15 组合关系,#include using namespace std;class Tyre/轮胎类Tyre的定义public:Tyre()coutConstructing one Tyre.endl;private:float maxSpeed;/最大速度int loadIndex;/载重指数float diameter;/直径char spec20;/规格char company20;/生产厂家;,-64-,8.15 组合关系,class SteeringWheel/方向盘类SteeringWheel的定义public:SteeringWheel()coutConstructing one SteeringWheel.endl;private:int color;/颜色 char material20;/材质char type10;/类型 char company20;/生产厂家;,-65-,8.15 组合关系,class Motor/发动机类Motor的定义public:Motor()coutConstructing one Motor.endl;private:float gasDischarge;/排气量float oilConsume;/耗油量float power;/功率float zip;/压缩比char company20;/生产厂家;,-66-,8.15 组合关系,class Car/汽车类Car的定义public:Car()coutConstructing one Car.endl;private:Tyre t44;/四个轮台SteeringWheel sw;/一个方向盘Motor m;/一个发动机;int main()Car car;return 0;,8.16 类模板,-68-,8.16 类模板,类模板是一个可以生成类的“超级数据类型”。定义类模板的语法如下:template,-69-,8.16 类模板,#include using namespace std;template class Maxpublic:Max(T pFirst,T pSecond,T pThird);T getMax();private:T first;T second;T third;,-70-,8.16 类模板,template Max:Max(T pFirst,T pSecond,T pThird):first(pFirst),second(pSecond),third(pThird)template T Max:getMax()T t;t=firstsecond?first:second;t=tthird?t:third;return t;,-71-,8.16 类模板,int main()Max nMax(1,2,3);cout fMax(1.1f,2.2f,3.3f);coutfMax is:fMax.getMax()endl;return 0;,-72-,小结,类是一种用户自定义的数据类型。定义类时需要定义其成员数据和成员函数。构造函数和析构函数是两个特殊的成员函数。成员数据和成员函数都必须具有一定的访问属性,即私有访问属性、公有访问属性和保护访问属性。由于类是一种数据类型,可以定义类的指针、类的引用、调用函数时进行类的值传递、类的指针传递和类引用传递。从成员归属类层次或者对象层次来看,成员可以是类的一般成员,也可以是类的静态成员。当在某个类的成员中定义另一个类的普通对象或对象数组时,就形成了整体-部分的组合关系。类可以定义或生成对象,同样,类模板可以定义或生成类。,

    注意事项

    本文(C大学基础教程第8章总结用.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开