您好,欢迎访问三七文档
参考:C++程序设计教程p56~p64第五讲类和对象(一)本次议题类与对象概述类类的声明类的定义对象对象的声明与成员访问实例化对象类和对象的简单应用举例类与对象概述对象:现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。现实中的对象都具有属性和行为。类与对象概述(cont.)类:是一种抽象的数据类型,是同种对象的集合与抽象,是具有共同行为和属性的若干对象的统一描述体本次议题类与对象概述类类的声明类的定义对象对象的声明与成员访问实例化对象类和对象的简单应用举例狗类行为吠叫属性名字品种年龄颜色classDog{public:voidyelp();private:stringname;stringbreed;intage;stringcolor;};映射抽象类的声明classDog//类名{public:voidyelp();//成员函数private:stringname;stringbreed;intage;stringcolor;};数据成员a_1类的声明(cont.)类的声明class类名{public:成员函数或成员变量的声明protected:成员函数或成员变量的声明private:成员函数或成员变量的声明};//分号!!类的声明(cont.)classTDate{public:voidsetDate(constintaYear,constintaMonth,constintaDay);boolisLeapYear()const;voiddisplay()const;private:intm_iYear;intm_iMonth;intm_iDay;};a_2类的声明(cont.)类名,class是声名类的关键字,类名是标示符,通常以T或者C开头,以示与对象,函数,变量区别类的成员,包含数据成员和成员函数两部分访问权限修饰符,包括公有的(public),私有的(private)和保护的(protected)三类。公有的成员用public来说明,一般为一些成员函数,它是提供给用户的接口功能。私有的成员用private来说明,私有部分一般为类的成员变量,用来描述对象的属性类的声明(cont.)访问权限修饰符类体内类体外private√×protected√×public√√本次议题类与对象概述类类的声明类的定义对象对象的声明与成员访问实例化对象类和对象的简单应用举例类的定义类的定义类体内定义类体外定义类的定义即给出成员函数具体的功能实现类的定义(cont.)classTPoint{public:voidsetX(intaX){m_iX=aX;}voidsetY(intaY){m_iY=aY;}voidmove(intaX,intaY){m_iX+=aX;m_iY+=aY;}voiddisplay()const{coutX:m_iXendl;coutY:m_iYendl;}private:intm_iX;intm_iY;};类体内定义:5_1类的定义(cont.)类体外定义:返回值类名::函数名(参数表){expression;}voidDog::yelp(){coutWoWo!endl;}类的定义(cont.)classTDate{public:voidsetDate(constintaYear,constintaMonth,constintaDay);boolisLeapYear()const;voiddisplay()const;private:intm_iYear;intm_iMonth;intm_iDay;};a_2类的定义(cont.)voidTDate::setDate(constintaYear,constintaMonth,constintaDay){m_iYear=aYear;m_iMonth=aMonth;m_iDay=aDay;}boolTDate::isLeapYear()const{return(!(m_iYear%4)&&(m_iYear%100)||!(m_iYear%400));}voidTDate::display()const{coutm_iYear.m_iMonth.m_iDayendl;}a_2类的定义(cont.)[注意]成员函数类体外定义时,必须在函数名前面加“类名::”若无“类名::”则该函数不是成员函数而是全局函数。类体外定义成员函数时,类体内必须声明该成员函数!不允许在类的声明部分对成员变量进行初始化。将类的声明与定义分开,类的声明放到头文件,定义放到源文件中本次议题类与对象概述类类的声明类的定义对象对象的声明与成员访问实例化对象类和对象的简单应用举例对象的声明与成员访问狗类行为吠叫属性名字品种年龄颜色莱丝行为莱丝.吠叫属性莱丝.名字:莱丝莱丝.品种:黑贝莱丝.年龄:三岁莱丝.颜色:黑色声明莱丝是一只狗对象的声明与成员访问(cont.)类名对象名表;对象名表一个对象对象数组指向对象的指针多个对象TDatedate;Dogdog;TDatetoday,tomorrow;TDate*pDate;TDatearray[10];对象引用Dogdg;Dog&ref=dg;对象的声明与成员访问(cont.)对象名.数据成员名;对象名.成员函数名(参数表);TDatetoday;today.setDate(1998,10,19);boolisLeap=today.isLeapYear();TPointpoint;point.setX(100);point.setY(100);point.move(50,50);point.display();对象的声明与成员访问(cont.)对象指针名-数据成员名;对象指针名-成员函数名(参数表);TDate*pDate=newTDate;pDate-setDate(1998,10,19);boolisLeap=pDate-isLeapYear();deletepDate;TPoint*pPoint=newTPoint;pPoint-setX(100);pPoint-setY(100);pPoint-move(50,50);pPoint-display();deletepPoint;对象的声明与成员访问(cont.)(*对象指针名).数据成员名;(*对象指针名).成员函数名(参数表);(&对象名)-成员函数名(参数表);(&对象名)-成员函数名;对象和指向对象的指针同样可以进行取地址和取值操作对象的声明与成员访问(cont.)TDate*pDate=newTDate;(*pDate).setDate(1998,10,19);boolisLeap=(*pDate).isLeapYear();deletepDate;TPointpoint;(&point)-setX(100);(&point)-setY(100);(&point)-move(50,50);(&point)-display();本次议题类与对象概述类类的声明类的定义对象对象的声明与成员访问实例化对象类和对象的简单应用举例实例化对象类的实例化栈区堆区静态存储区(全局区)实例化对象:栈区中的对象法一:先声明类类型,再定义对象推荐classStudent{public:voiddisplay()const{......}private:intm_iNum;stringm_strName;charm_cSex;};Studentstud1;//classStudentstud1;法二:在声明类的同时定义对象classStudent{public:voiddisplay()const{coutnum:m_iNumendl;coutname:m_strNameendl;coutsex:m_cSexendl;}private:intm_iNum;stringm_strName;charm_cSex;}stud1,stud2;实例化对象:栈区中的对象(cont.)法三:不出现类名,直接定义对象class//省略类名{public:voiddisplay()const{coutnum:m_iNumendl;coutname:m_strNameendl;coutsex:m_cSexendl;}private:intm_iNum;stringm_strName;charm_cSex;}stud1,stud2;实例化对象:栈区中的对象(cont.)[注意]通常采用先定义类,后定义对象的方法,其他方法不使用对象占据内存单元而类类型不占据内存单元以上方法创建的对象均在栈区实例化对象:栈区中的对象(cont.)1.概念:用new创建的无名对象,存储在堆区2.建立堆对象new类名new类名[无符号整型表达式]实例化对象:堆区中的对象可为无符号整型变量实例化对象:堆区中的对象(cont.)constintKArrSize=100;TDate*pdate=newTDate;TDate*arry=newTDate[KArrSize];Dog*dog=newDog;Dog*dogArr=newDog[KArrSize];3.释放堆对象delete指针名delete[]指针名例1:A*ptr=NULL;ptr=newA;deleteptr;例2:A*ptr=NULL;ptr=newA[5];delete[]ptr;实例化对象:堆区中的对象(cont.)[注意]delete只能回收由new返回的指针指向的内存空间,包括空指针。一个指针只能delete一次。删除对象数组时无论几维array,delete前都只有一个[]。确认不用的空间一定要delete。实例化对象:堆区中的对象(cont.)实例化对象:全局区中的对象全局区中的对象和内置类型static变量存储类别规则是相同classStudent{public:voidsetName(conststringaName){m_strName=aName}voiddisplay()const{coutm_strNameendl;}private:stringm_strName;};b1实例化对象:全局区中的对象(cont.)staticStudents_stu2;intmain(){Stdudentstu;stu.setName(Jim);stu.display();staticStudents_stu1;s_stu1.setName(Lily);s_stu1.display();s_stu2.setName(Morrison);s_stu2.display();return0;}实例化对象:对象的存储思考:对象的存储方式?对象1对象2对象10...成员函数data1data2data10对象的存储方式:实例化对象:对象的存储(cont.)#includeiostreamusingnamespacestd;classTime{public:voidset();private:intm_iHour;intm_iMinute;intm_iSec;};voidTime::set(){cinm_iHourm_iMinutem_iSec;}intmain(){coutsizeof(Time)endl;return0;}5_2实例化对象:对象的存储(cont.)[注意]无论成员函数在类内还是在类外定义,成员函数都不占用对象的存储区说成员函数是对象的只是从逻辑角度上说的,而非物理角度而言对象的存储类别和内置类型变量相同实例化对象:对象的存储(cont.)实例
本文标题:18C++类和对象
链接地址:https://www.777doc.com/doc-3765584 .html