如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1第9章关于类和对象的进一步讨论注意:类的数据成员是不能在声明类时初始化。456789在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。构造函数首部的一般格式为:构造函数名(类型1形参1,类型2形参2,…)1112例1:有两个长方柱,其长、宽、高分别为:(1)12,20,25;(2)10,14,20。求它们的体积。编一个基于对象的程序,在类中用带参数的构造函数对对象初始化。1415161718classMy{public:My(charone):flag(one){……}printpage(){……}private:charflag;voidprintdoc(){……}}intmain(){Myhp,ca("A");ca.printdoc();return0;}1、类体定义结束少了分号2、缺少不带参数构造函数,即默认构造函数3、ca("A"),参数应该是字符4、printpage()成员函数缺少返回类型5、printdoc()成员函数访问权限是private,不能直接访问构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。例2:将例1程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。2223例3:设计一个类CDateinfo,其私有数据成员有year(年)、month(月)、day(日),要求其满足下述要求。(1)要求有一个无参数的构造函数,其初始的年、月、日分别为:2011,1,1。(2)要求有一个带参数的构造函数,其参数分别对应年、月、日。(3)要求用一个成员函数实现日期的设置。(4)要求用一个成员函数实现日期的输出。构造函数和普通成员函数的区别:262728293031例:一个班有50个学生,每个学生的属性包括学号、年龄、成绩等。可定义一个"学生类"对象数组,每一个数组元素是一个"学生类"对象。例如:Studentstud[50];//假设已声明了Student类,定义stud数组,有50个元素对象数组的初始化:1、如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供实参。如:Studentstud[3]={101,102,103};//合法,3个实参分别传递给3个数组元素的构造函数2、如果构造函数有多个参数,在定义对象数组时,必须在花括号中分别写出构造函数并指定实参。例如:构造函数有3个参数,分别代表学号、年龄、成绩。按以下方式定义并初始化对象数组:StudentStud[3]={//定义对象数组Student(1001,18,87),//调用第1个元素的构造函数Student(1002,19,76),//调用第2个元素的构造函数Student(1003,18,72)//调用第3个元素的构造函数};在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的指针。3637383940419.6共用数据的保护9.6.1常对象、常数据成员、常成员函数#include<iostream>usingnamespacestd;classGoods{public:Goods(inta,intb):m(a),count(b){}voidf()const{cout<<m<<endl;count++;cout<<count<<endl;}private:constintm;mutableintcount;};9.6.2指向对象的常指针、指向常对象的指针Timet1(12,12,12),t2(1,1,1);Time*constp1=&t1;//定义并初始化指向对象的常指针t1.hour=1;p1->hour=1;(*p1).hour=1;p1=&t2;constTime*p2;//定义指向常对象的指针p2=&t2;//赋值,指针p2指向对象t2t2.hour=12;p2->hour=12;(*p2).hour=1;p2=&t1;9.6.3对象的常引用为合理利用内存空间的资源。可以用new运算符动态建立对象,用delete运算符撤销对象。如果已经定义了一个Box类,可以用下面的方法动态地建立一个对象:用new运算符动态地分配内存后,将返回一个指向新对象的指针的值,即所分配的内存空间的起始地址。用户可以获得这个地址,并通过这个地址来访问这个对象。需要定义一个指向本类的对象的指针变量来存放该地址。如Box*pt;//定义一个指向Box类对象的指针变量ptpt=newBox;//在pt中存