《中的类和对象》PPT课件

上传人:y****n 文档编号:245076673 上传时间:2024-10-07 格式:PPT 页数:41 大小:2.16MB
返回 下载 相关 举报
《中的类和对象》PPT课件_第1页
第1页 / 共41页
《中的类和对象》PPT课件_第2页
第2页 / 共41页
《中的类和对象》PPT课件_第3页
第3页 / 共41页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Institute of Computer Software,Nanjing University,*,C+中的类和对象,曹迎春,y,FAQ1,如何理解类和对象?,在面向对象程序设计中,类表示对现实世界中一类具有共同特征的事物的抽象。,类,的定义是由两部分组成的,分别是声明部分和实现部分。声明部分用来声明该类的成员,包括数据成员及成员函数,(,数据成员即是属性,成员函数即是方法,),,实现部分是成员函数的具体实现。,10/7/2024,2,class 类名,public:,公有数据成员或成员函数声明;,private:,私有数据成员或成员函数声明;,protected:,受保护数据成员或成员函数声明;,10/7/2024,3,#include“iostream.h”,class Stu,private:,char name20;,int age;,char sex10;,public:,void stuinfo(),cout”name:”nameendl;,cout”age:”ageendl;,cout”sex:”sexendl;,10/7/2024,4,#include“iostream.h”,class Stu,private:,char name20;,int age;,char sex10;,public:,void stuinfo();,;,void Stu:stuinfo(),cout”name:”nameendl;,cout”age:”ageendl;,cout”sex:”sexendl;,10/7/2024,5,对象的定义方式:,先定义类再定义对象,定义类的同时定义对象,#include“iostream.h”,class Stu,private:,char name20;,int age;,char sex10;,public:,void stuinfo();,;,Stu s1,s2;,/对象,#include“iostream.h”,class Stu,private:,char name20;,int age;,char sex10;,public:,void stuinfo();,s1,s2;,10/7/2024,6,FAQ2,如何理解对象的初始化?,构造函数用来对类对象进行初始化,它完成对内存空间的申请、赋初值等工作。,析,构函数主要是用来做清理工作的。,10/7/2024,7,class Stu,private:,char name20;,int age;,char sex10;,public:,Stu(charc120,char c210,int n);/构造函数,void stuinfo();,;,10/7/2024,8,class Stu,private:,char name20;,int age;,char sex10;,public:,Stu(charc120,char c210,int n);/构造函数,void stuinfo();,Stu();/析构函数,;,10/7/2024,9,#include,#include,class Stu,private:,char name20;,int age;,char sex10;,public:,Stu(char c120,char c210,int n);/构造函数,void stuinfo();,Stu();/析构函数,;,Stu:Stu(char c120,char c210,int n)/构造函数定义,cout“constructor called!”endl;,strcpy(name,c1);,strcpy(sex,c2);,age=n;,10/7/2024,10,Stu:Stu()/析构函数定义,cout“disconstructor called!”endl;,void Stu:stuinfo(),cout”name:”nameendl;,cout”age:”ageendl;,cout”sex:”sexendl;,void main(),Stu s1(“Mary”,”w”,23),s2(“Jack”,”m”,25);,s1.stuinfo();,s2.stuinfo();,10/7/2024,11,FAQ3,如何理解对象的生存周期?,对象的生存周期是从对象创建到释放的一段时间。对象可以按生存周期的不同分为,4,种,即局部对象,全局对象,静态对象和动态对象。,局,部对象的生存周期较短;静态对象的生存周期较长;全局对象的生存周期最长;而动态对象的生存周期取决于,new,运算符和,delete,运算符的之间的间隔。,10/7/2024,12,#include,#include,class Test,char*mp;,public:,Test(char*lp)/类Test的构造函数,mp=NULL;,coutTest:Test()endl;,int len=strlen(lp)+1;/获得lp指向内容的长度,mp=new charlen;/动态分配len大小的内存空间,memset(mp,0,len);/内存设置,strncpy(mp,lp,len);/将len长的lp内容赋给mp,Test(),coutTest:Test()endl;,if(NULL!=mp),delete mp;/如果mp的内容不为NULL,释放,13,o,perator char*()/重载char*类型,return mp;/返回mp,;,int main(),Test t=Test();,char*p=t;,coutcall fun beforeendl;,coutlenstrlen(p)endl;,coutendendl;,return 0;,10/7/2024,14,FAQ4,如何向函数传递对象?,值传递,地,址传递,10/7/2024,15,#include,class Test,public:,Test(int a)/构造函数,num=a;,void setnum(int a),num=a;,int getnum(),return num;,private:,int num;,;,void add(Test t)/类对象作为函数参数,t.setnum(t.getnum()+t.getnum();,coutnnum value add.;,coutt.getnum()endl;,int main(),Test tt(100);/调用构造函数,add(tt);/调用函数add(),参数按值传递,coutobject tt changed is main.;,couttt.getnum()setnum(t-getnum()+t-getnum();,coutnnum value add.;,coutgetnum()endl;,int main(),Test tt(100);/调用构造函数,add(/调用函数add(),参数按值传递,coutobject tt changed is main.;,couttt.getnum()endl;,return 0;,17,#include,class Test,public:,Test(int a)/构造函数,num=a;,void setnum(int a),num=a;,int getnum(),return num;,private:,int num;,;,void add(Test&t)/类对象作为函数参数,t.setnum(t.getnum()+t.getnum();,coutnnum value add.;,coutt.getnum()endl;,int main(),Test tt(100);/调用构造函数,add(tt);/调用函数add(),参数按值传递,coutobject tt changed is main.;,couttt.getnum()hour;,cinminute;,cinsec;,void Time:show_Time(),couthour:minute:secendl;,23,如果自己没有定义构造函数,系统会自动创建默认的无参数,空构造函数。如果自定义了一个构造函数,系统则不会自动创建默认构造函数。并且当声明类的实例时,需要使用自定义的构造函数。,构造函数必须是公有的。,构造函数的名称必须与类名相同。,构造函数没有返回值。,构造函数是成员函数,函数体可写在类体内,也可定义在类体外。,构造函数是一个特殊的函数,该函数的名称与类名相同,不指定类型说明,有隐含的返回值,该值由系统内部使用。,程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。,构造函数可以无参数,可以有一个参数,也可以有多个参数。,构造函数可以重载,即可以定义多个参数个数不同的构造函数。,10/7/2024,24,FAQ7,默认构造函数是什么,它有什么特点?,如果程序中没有提供任何构造函数,则,C+,提供一个默认的构造函数,该默认构造函数是无参构造函数,它仅负责创建对象,不做任何初始化的工作。,默认构造函数的特点如下:,在创建对象时编译器自动创建并调用。,无参数,函数体为空。,仅当没有自定义构造函数时编译器才会自动创建。,10/7/2024,25,#include,#include,class Stu,public:,Stu():val(6),Stu(int val):val(6),int val;,;,void main(),Stu s;,couts.val;,Stu arr4;,coutarr2;,vector vec(5);,coutvec3.valendl;,Stu*ptr=new Student4;,coutptr1.val;,Stu ss=Student();,coutss.val;,26,FAQ8,何时调用拷贝构造函数?,拷贝构造函数是由编译器调用,用来完成一系列基于同一类的其他对象的构件及初始化,拷贝构造函数的一般形式如下:,类名,(,类名,&,变量名,),函数体,;,10/7/2024,27,对象以值传递的方式传入函数体,即函数的返回值是对象,调用函数进行形参和实参结合时。例如:,class Test,;,copyfun(Test p)/函数的形参是类的对象,int main(),Test t;,copyfun(t);,/当调用函数,函数的实参传给形参,调用拷贝构造函数,/省略,10/7/2024,28,对象以值传递的方式从函数返回,即函数的返回值是对象,函数返回值时。例如:,class Test,;,Test copyfun()/函数的返回值是类的对象,Test t(100);,return t;/函数返回的是对象,int main(),Test t1;,t1=copyfun();/返回函数值时,调用拷贝构造函数,/省略,10/7/2024,29,对象需要通过其他对象进行初始化,即当使用类的一个对象去初始化该类的另一个对象时。例如:,class Test,;,int main(),Test t1;,Test t2(t1);/使用t1初始化t2,/省略,10/7/2024,30,#include,#include,/自定义类Person,class Person,public:/公有声明部分,Person(char*pn);/构造函数声明,Person(Person/拷贝构造函数声明,Person();/析构函数声明,private:/私有声明部分,char*pname;/定义字符指针pname,;,/构造函数实现部分,Person:Person(char*pn),coutPerson is called:pnendl;/输出pn里存储的字符串,pname=new charstrlen(pn)+1;,if(pname!=0),strcpy(pname,pn);/将pn的值赋给pname,31
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!