C-3-对象与类-例子-PPT课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C-3-对象与类-例子-PPT课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象 例子 PPT 课件
- 资源描述:
-
1、1Chap3 C+的类李春花QQ:471767100武汉光电国家实验室B4052类和对象类和对象 对象(object)表示现实世界中可以明确识别的实体。例如,学生、圆、按钮等。对象具有状态和行为。类(class)定义了同一类对象共有的属性和方法。类是对象的模板、蓝图。对象是类的实例。状态(变量)行为(方法)姓名:张三学号:0001身高:1.73学习工作娱乐3class Circle private:double radius;public:Circle();Circle(double r);double findArea();;#include“Circle.h”Circle:Circle()
2、radius=1.0;Circle:Circle(double r)radius=r;double Circle:findArea()return radius*radius*3.14;示例-圆类数据成员函数成员声明构造函数声明Circle c1;radius=1.0;Circle c2(3.0);radius=3.0;Circle c3(15.0);radius=15.0;构造函数定义函数成员定义Circle.hCircle.cppmain.cpp#include“Circle.h”void main()Circle c1,c2(3.0);coutc1.findArea();cout 0.0
3、)radius=r;else radius=1.0;Circle c1;/用户没指定参数,调用缺省构造函数 Circle c2(5.0);/调用带参数构造函数,实参5.0传给形参r,将对象c2的 /半径设为5.0 cout c1.radiuse;/1.0 cout c2.radiuse;/5.05类的声明及定义类的声明:由保留字class、struct或union加上类的名称构成。类的定义:包括类名的声明部分和类由 括起来的主体两部分构成。类的实现:通常指类的函数成员的实现,即定义类的函数成员。class 类型名;/前向声明class 类型名 /类的定义private:私有成员声明或定义;pr
4、otected:保护成员声明或定义;public:公有成员声明或定义;类保留字:class、struct或union可用来声明和定义类。6访问权限l 封装机制定义数据成员、函数成员和类型成员的访问权限,提供对外访问接口访问内部私有或保护数据。包括三类:private:私有成员可被本类的函数成员访问,不能被派生类函数成员、其它类的函数成员和普通函数访问。protected:受保护成员可被本类和派生类的函数成员访问,不能被其它类函数成员和普通函数访问。public:公有成员可被任何函数成员和普通函数访问。l 注意:类的友元不是当前类的成员,可以在private、protected和public等任
5、意位置说明,友元可以像类自己的函数成员一样访问类的所有成员。l 进入class定义的类时,缺省访问权限为private;进入struct和union定义的类时,缺省访问权限为public。77class FEMALE /缺省访问权限为privateint age;/私有的,本类函数成员和友员可访问public:/访问权限改为publictypedef char*NAME;/公有的,都能访问protected:/访问权限改为protectedNAME nickname;/本类和派生类函数成员、友员可访问NAME getnickname()return nickname;/自动内联public:/
6、访问权限改为publicNAME name;/公有的,都能访问 w;void main(void)FEMALE:NAME n=w.name;/任何函数都能访问公有name n=w.nickname;/错误,main不得访问保护成员 n=w.getnickname();/错误,main不得调用保护成员 int d=w.age;/错误,main不得访问私有age【例3-4】定义FEMALE类 访问权限用法8l 使用private、protected和public保留字标识每一区间的访问权限,同一保留字可以多次出现;l 同一区间内可以有数据成员、函数成员和类型成员,习惯上按类型成员、数据成员和函数成
7、员分开;l 成员可以任意顺序出现在类定义中,函数成员的实现既可放在类体外面;也可内嵌在类体定义中,此时会自动成为内联函数;l 若函数成员在类的定义体外实现,则须在函数返回类型和函数名之间,使用类名和作用域运算符“:”指明该函数成员所属的类;l 声明类时不允许初始化数据成员,应由构造函数完成;l 类的定义体花括号后要有“;”作为类体结束标志。99class COMP double r,v;public:COMP(double rp,double vp)r=rp;v=vp;/自动内联inline double getr();/inline保留字可以省略,后面有定义double getv();inl
8、ine double COMP:getv()return v;/定义内联void main(void)COMP c(3,4);double r=c.getr();/此时getr的函数体未定义,内联失败double v=c.getv();/函数定义在调用之前,内联成功inline double COMP:getr()return r;/定义内联【例3-7】定义一个复数类 内联函数必须在使用前进行定义1010#include#include#include struct STRING char*s;STRING(char*);STRING();STRING:STRING(char*t)s=(cha
9、r*)malloc(strlen(t)+1);strcpy(s,t);coutConstruct:s;STRING:STRING()/防止反复释放内存 if(s=0)return;coutDeconstruct:s;free(s);s=0;/提倡0代替null指针void main(void)STRING s1(String 1n);STRING s2(String 2n);STRING(“Constantn”);/常量对象 cout RETURNn;/自动析够构s2,s1Construct:String 1Construct:String 2Construct:ConstantDeconst
10、ruct:ConstantRETURNDeconstruct:String2Deconstruct:String1构造析构顺序113.4new和deletel 内存管理函数和new、delete的区别:n内存分配:malloc为函数,实参用值表达式,分配后内存初始化为0;new为运算符,操作数用类型表达式,先在底层调用malloc,然后调用构造函数;n内存释放:free为函数,实参用指针类型值表达式,直接释放内存;delete为运算符,操作数为指针类型值表达式,先调用析构函数,然后底层调用free。l 如为简单类型(没有构造、析构函数)指针分配和释放内存,则new和malloc、delete和
11、free没有区别,可混合使用,如new分配的内存可用free释放。1212l new 类型表达式:int*p=new int;/等价int*p=new int(0);数组形式仅第一维下标可为任意表达式,其它维为常量表达式:int (*q)68=new intx+2068;【例3-13】为对象数组分配内存时,必须调用参数表无参构造函数。l delete 指针指向非数组的单个实体使用delete p,如p指向对象,则先调用析构函数,再释放对象所占的内存。l delete 指针指向任意维的数组时使用delete p;否则内存泄露 如p指向对象数组,则对所有对象(元素)先调用析构函数。然后释放对象数组
12、占有的内存。1313#include#include class ARRAY /class体的缺省访问权限为privateint*a,r,c;public:/访问权限改为publicARRAY(int x,int y)/int型可用malloc r=x;c=y;a=new int r*c;ARRAY()if(a)delete a;a=0;/可用free(a);也可用delete a;void main(void)ARRAY y(3,5),*p;p=new ARRAY(5,7);delete p;/main返回前析构y/不能用malloc,ARRAY需要调构造函数/不能用free,否则p未调用析
13、构函数1414两种内存管理方式的区别ar=0c=0r.c=35个整型元素p(a)p=new Array(5,7)Step 1:为对象分配内存p=(Array*)malloc(sizeof(Array)Step 2:调用构造函数a=new int r*c(b)p=(Array*)malloc(sizeof(ARRAY)a=nullr=0c=0pr=5c=71515ar=5c=7r.C=35个整型元素p(d)delete pStep 2:释放Array对象内存free(p)Step 1:先调析构函数delete a,释放a指向的内存(b)free(p)ar=5c=7r.C=35个整型元素p直接释放
展开阅读全文