资源描述
单击此处编辑母版标题样式,第一级,第二级,*,数据抽象,第三章,回顾,引用,默认参数,内联函数,函数重载,2,目标,类,成员变量,成员函数,this,指针,对象数组,3,类,定义数据的类型以及操作这些数据的函数,类的实例称为对象,类中的变量和函数称为成员,4,私有和公,有,2-1,类成员可以在类的公有或者私有部分声明,数据成员通常在私有部分中声明,在公有部分中声明的成员可以被该类外部的函数访问,公有部分构成类的接口,private,public,5,私有和公,有,2-2,无法从类的外部访问私有数据,其他类的私有数据对于当前类也是隐藏的,类,数据或函数,数据或函数,私有,公,有,不可从类的外部访问,可以从类的外部访问,6,c,onst成员变量,常量的值在程序的执行期间不会改变,常量必须初始化,const,int num=100;,num=200;/,错误,num+;/,错误,7,成员函数,2-1,类的函数称为成员函数,成员函数通常放在类的公有部分,必须定义返回值及参数列表,例如,void,setdate(,int,int,int,);,8,成员函数,2-2,成员函数可以有局部变量、参数等,成员函数不应与数据成员同名,9,调用成员函数,2-1,通过调用成员函数与对象通信,object1.member_function1(200);object1.member_function2();,调用成员函数是操作特定的对象,而不是类,使圆点操作符与特定对象关联,10,调用成员函数,2-2,访问类的成员函数的一般语法:,class_object.function_member,();,成员操作符,11,构造函数,4-1,自动初始化对象的特殊的成员函数,与所属的类同名,可以在类中声明并定义构造函数,或在类中声明而在外部定义,12,构造函数,4-2,构造函数没有返回类型,默认构造函数是不带任何参数的构造函数,class username,public:,username();,/构造函数,;,username:username(),13,构造函数,4-3,class date,int month,day,year;,public:,date(),/,默认构造函数,day=1;month=1;year=1999;,date(int,x),/,仅指定,日,day=x;month=1;year=1999;,date(int,x,int y,int z),/,指定年月日,day=x;month=y;year=z;,;,14,构造函数,4-4,编译器根据参数调用不同的构造函数,date now;,date today(4);,date all(23,3,1998);,15,析构函数,在对象销毁时自动调用的成员函数,编译器会生成对析构函数的调用,与类同名,但是在函数名前有个波浪号,(),析构函数没有返回类型,也不带参数,class username,public:,username();,/,析构函数,;,16,使用类,2-1,class,exampleclass,private:,int data;,public:,member_function1(,parameter,),assign value to data,member_function2(),display data,;,17,使用类,2-2,void main(),/,定义类,exampleclass,的对象,exampleclass,object1,object2;,/,调用成员函数,将值,200,赋给,data,object1.member_function1(200);,/,调用显示数据的成员函数,object1.member_function2();,object2.member_function1(350);,object2.member_function2();,18,作用域,2-1,使用作用域解析操作符,(:),在类外定义成员函数,return_type,class_name,:,member_functions,(arg1,arg2,.,argn),参数的类型必须与声明的类型完全匹配,19,作用域,2-2,作用域操作符左侧是类名,将函数标识为特定类的成员,在全局与局部变量同名的情况下引用全局变量,:,global_variable,如果两个变量有不同的用途,它们的名称应该反映出这个区别,20,作用域表,位置,动作,定义时,调用构造函数,超出作用域,调用析构函数,21,静态成员,2-1,同一个类的所有对象共享数据项,只会为整个类创建一个静态数据项,只在类的内部可见,生命周期贯穿整个程序,static,data_type,variable;,22,静态成员,2-2,应该在,main(),程序开始之前创建并初始化,class,race_cars,private:,static,int Count;,int,car_number,;,char name30;,public:,race_cars()count,+;,/,构造函数,,,用于增加,count,race_cars()count,-;/,析构函数,,,用于,减,小,count,;,int,race_cars:count,;,23,关于,静态数据成员的更多内容,如果将一个静态成员声明为类的私有成员,则非成员函数不能访问它,是类的全局数据,不是对象的一部分,没有,this,指针,24,静态成员函数,不是对象的一部分,没有,this,指针,只能操纵类的静态数据成员,25,静态成员函数示例,class alpha,private:,static,int count;,/,静态数据,public:,alpha(),/,构造函数,count+;,static,void,display_count,()/,静态成员函数,cout,count;,cout,age=5;,this-,getdata,();,27,this,的用法,class person,private:,int age;,public:,void display();,;,void,Person:display,(),this-age,=25;/,与,age=25,一样,cout,age,;/,与,cout,age,一样,cout,endl,;,;,int main(),Person Jack;,Jack.display,();,return 0;,28,对象,每个对象对类中的数据成员都有其自己的副本,给定类的所有对象都使用相同的成员函数,在定义每个对象时数据就会存入内存,所以每个对象都有一个数据集,29,对象声明,对象,1,数据,1,数据,2,对象,2,数据,1,数据,2,对象,3,数据,1,数据,2,成员函数,1(),成员函数,2(),30,n,ew,2-1,用于为类的对象创建内存空间,如果成功,返回指向所分配内存空间的指针,data_type,pointer_variable,=,new,data_type,;,例如,int*p;/,指向,int,类型的指针,float*f;/,指向,float,类型的指针,p=new int;/,为,int,类型分配内存,f=new float;/,为,float,类型分配内存,31,n,ew,2-2,内存空间不足或者检测到错误,返回空,new,类似于,C,语言中所使用的,malloc,(),函数,对于对象也是同样的语法,Student*,stu_ptr,;/,指向,Student,类型对象的指针,stu_ptr,=new Student;/,指向新的,Student,对象,32,d,elete,2-1,delete,显式销毁由,new,创建的对象,int*,ptr,;,ptr,=new int;,*,ptr,=12;,cout,),访问成员,today_ptr,-,getdate,();,36,总结,类,成员变量,成员函数,this,指针,对象数组,37,
展开阅读全文