华南理工大学计算机学院周霭如2009chap6类与对象6.1类与对象6.2构造函数和析构函数6.3类的其他成员6.4类的包含小结华南理工大学计算机学院周霭如2009类(Class)是面向对象程序设计(OOP)实现信息封装的基础。类是用户定义类型,也称为类类型每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象第6章类与对象华南理工大学计算机学院周霭如2009面向对象编程的程序基本单位是类类是数据和操作数据的函数的封装类的对象使用自己的方法完成对数据的操作类可以隐藏数据和操作细节,对象通过类接口与外部通信6.1类与对象华南理工大学计算机学院周霭如20096.1类与对象//排序函数原型voidSort(int[],int);//数组相加函数原型voidAdd(int[],int[],int);……intmain(){inta[10],b[10];…….Sort(a,10);Sort(b,10);Add(a,b,10);…….}数组与数组类封装华南理工大学计算机学院周霭如2009classArray//定义数组类{int*ap;intlen;public:Array(intsize)//建立数组{len=size;ap=newint[size];}voidSort();//排序//重载算符+函数Arrayoperaor+(constArray&other);};……intmain(){Arraya(10),b(10);//声明对象…….a.Sort();b.Sort();//调用排序方法a=a+b;//数组相加…….}//排序函数原型voidSort(int[],int);//数组相加函数原型voidAdd(int[],int[],int);……intmain(){inta[10],b[10];…….Sort(a,10);Sort(b,10);Add(a,b,10);…….}数组与数组类封装6.1类与对象华南理工大学计算机学院周霭如2009classArray//定义数组类{int*ap;intlen;public:Array(intsize)//建立数组{len=size;ap=newint[size];}voidSort();//排序//重载算符+函数Arrayoperaor+(constArray&other);};……intmain(){Arraya(10),b(10);//声明对象…….a.Sort();b.Sort();//调用排序方法a=a+b;//数组相加…….}//排序函数原型voidSort(int[],int);//数组相加函数原型voidAdd(int[],int[],int);……intmain(){inta[10],b[10];…….Sort(a,10);Sort(b,10);Add(a,b,10);…….}数组与数组类classArray//定义数组类{int*ap;intlen;public:Array(intsize)//建立数组{len=size;ap=newint[size];}voidSort();//排序//重载算符+函数Arrayoperaor+(constArray&other);};类是数据和操作数据的函数的封装封装6.1类与对象华南理工大学计算机学院周霭如2009classArray//定义数组类{int*ap;intlen;public:Array(intsize)//建立数组{len=size;ap=newint[size];}voidSort();//排序//重载算符+函数Arrayoperaor+(constArray&other);};……intmain(){Arraya(10),b(10);//声明对象…….a.Sort();b.Sort();//调用排序方法a=a+b;//数组相加…….}//排序函数原型voidSort(int[],int);//数组相加函数原型voidAdd(int[],int[],int);……intmain(){inta[10],b[10];…….Sort(a,10);Sort(b,10);Add(a,b,10);…….}数组与数组类对象使用自己的方法对数据操作a.Sort();b.Sort();//调用排序方法a=a+b;//数组相加封装6.1类与对象华南理工大学计算机学院周霭如2009几点如何调整通信6.1类与对象华南理工大学计算机学院周霭如2009构造class钟{private:钟的构造;public:读取时间值;调整时间值;};对象通过类接口与外部通信通信6.1类与对象华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};关键字定义一个类标识符类名class,struct,union都可以定义一个类:class缺省说明时,其成员被认为是私有的struct若不特别指出,其所有成员都是公有的union其所有成员都是公有的,且不能更改华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}aTdate类型的一个对象(实例)华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}类由成员构成:数据成员——描述对象的属性成员函数——描述对象的方法华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}intmonth;intday;intyear;数据成员华南理工大学计算机学院周霭如20096.1.1定义类和对象//例6-1一个类的例子#includeiostreamusingnamespacestd;classTdate{public:voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.dayendl;}private:intmonth;intday;intyear;};intmain(){Tdatea;a.Set(10,16,2003);a.Print();}voidSet(intm,intd,inty){month=m;day=d;year=y;}intIsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}voidPrint(){coutyear.month.