第3章例题【例3-1】//employee2.h#includeiostream#includestringusingnamespacestd;classEmployee//定义Employee类{public:Employee();//构造函数的声明voidSetname(string);//设置姓名函数voidSetpay(floatpay);//设置工资函数stringGetname();//提取姓名函数voidDisplay();//显示信息函数protected:stringname;//姓名intno;//编号floatsalary;//月工资staticintmaxno;//静态数据成员,表示员工编号基数};//employee2.cpp#includeemployee2.hintEmployee::maxno=1000;//静态数据成员初始化Employee::Employee()//构造函数的实现{no=++maxno;}voidEmployee::Setname(stringnamep)//设置姓名函数,指针作函数参数{name=namep;}voidEmployee::Display()//显示信息函数{cout编号为:no,本月工资为:salaryendl;}stringEmployee::Getname()//提取姓名函数{returnname;}voidEmployee::Setpay(floatpay)//设置工资函数{salary=pay;}//example3_34.cpp#includeemployee2.hintmain(){Employeeemployy[4];//创建对象数组floatpay;stringnameptr;//字符数组inti;for(i=0;i4;i++){cout请输入下一个员工的姓名:;cinnameptr;employy[i].Setname(nameptr);cout请输入员工的月工资:;cinpay;employy[i].Setpay(pay);}for(i=0;i4;i++){coutemployy[i].Getname()的;employy[i].Display();}return0;}【例3-2】//example3_2.cpp#includeiostreamusingnamespacestd;voidf1(){inta=1,b=2;staticintc;a++;b++;c++;couta''b''cendl;}intmain(){inta=1,b=2,c=3;f1();f1();f1();couta''b''cendl;return0;}【例3-3】//example3_3.cpp#includeiostreamusingnamespacestd;intmain(){int*iptr;//声明int型指针iptrinti;//声明int型数iiptr=&i;//取i的地址赋给iptri=100;//int型数赋初值coutOutputinti=iendl;//输出int型数的值coutOutputintpointeri=*iptrendl;//输出指针所指地址的内容return0;}【例3-4】//example3_4.cpp#includeiostreamusingnamespacestd;intmain(){int*a=newint;//在堆中分配int型变量所需空间,并将起始地址赋给指针a*a=76;//将76存入指针a指向的内存空间cout*aendl;//输出指针a指向的内存空间的值deletea;//释放a指向的动态存储空间return0;}【例3-5】//example3_5.cpp#includeiostreamusingnamespacestd;intmain(){intarraysize;int*array;coutpleaseinputanumberofarray:;cinarraysize;if((array=newint[arraysize])==NULL)//申请一块连续的存储空间{coutCan'tallocatememory,terminating.;//未分配到存储空间exit(1);//发生错误,退出程序}for(intcount=0;countarraysize;count++){array[count]=count*2;coutarray[count];}coutendl;delete[]array;//释放array指向的连续存储空间return0;}【例3-6】//example3_6.cpp#includeiostreamusingnamespacestd;structlist//结构体{intdata;list*next;};classQueue//队列类{public:Queue()//构造函数{ptrf=ptrb=NULL;//将两个指针初始化为空}voidenqueue(int);//入队函数intdequeue();//出队函数private:list*ptrf;//队首指针list*ptrb;//队尾指针};voidQueue::enqueue(intx)//入队函数的实现{list*newnode=newlist;//动态分配内存newnode-data=x;newnode-next=NULL;if(ptrb==NULL)//队空时入队的情况,如图3-4所示ptrf=ptrb=newnode;else//队非空时入队的情况,如图3-5所示{ptrb-next=newnode;ptrb=newnode;}}intQueue::dequeue()//出队函数的实现{list*tmp;intvalue;value=ptrf-data;tmp=ptrf;ptrf=ptrf-next;//出队后的情况如图3-6所示deletetmp;returnvalue;//返回出队的数据项}intmain(){QueueA;//队列对象Aintarr[]={2,3,4,5,7};cout入队顺序:;for(inti=0;i5;i++){coutarr[i];A.enqueue(arr[i]);//将数组元素作为数据项依次入队}coutendl出队顺序:;for(i=0;i5;i++)coutA.dequeue();//将队列中数据项依次出队coutendl;return0;}【例3-7】//student.h#includeiostreamusingnamespacestd;classStudent//学生类的声明{intid;//私有数据成员,外部不可见charname[10];floatscore;//为了简化程序,只保留了一个学生成绩public://公有成员函数,外部接口voidinput(intpid,char*pname,floats);voidmodify(floats);voiddisplay();};//student.cpp#includestudent.hvoidStudent::input(intpid,char*pname,floats)//成员函数的实现{id=pid;strcpy(name,pname);score=s;}voidStudent::modify(floats){score=s;}voidStudent::display(){coutid:idendl;//虽在类外,成员函数仍可访问私有成员coutname:nameendl;coutscore:scoreendl;}//example3_7.cpp#includestudent.hintmain(){Student*pstu=newStudent;//动态申请内存空间(*pstu).input(8410105,WangLi,90);//通过堆对象访问公有成员函数(*pstu).display();//通过堆对象访问公有成员函数(*pstu).modify(85);//通过堆对象访问公有成员函数(*pstu).display();//通过堆对象访问公有成员函数deletepstu;return0;}【例3-8】//example3_8.cpp#includeiostreamusingnamespacestd;namespacemyown1//定义名字空间myown1{char*user_name=myown1;//在名字空间myown1中定义指针名user_name}namespacemyown2//定义名字空间myown2{char*user_name=myown2;//在名字空间myown2中定义指针名user_name}intmain(){coutHello,myown1::user_name//用名字空间限制符访问变量user_name...andgoodbye!endl;coutHello,myown2::user_name//用名字空间限制符访问变量user_name...andgoodbye!endl;return0;}【例3-9】//example3_9.cpp#includeiostreamusingnamespacestd;//voidv;//错误,不能声明void类型的变量void*vp;//正确,可以声明void类型的指针intmain(){int*ip;inti=10;vp=&i;//void类型指针指向整型变量//cout*vp=*vpendl;//错误,void型指针在使用前必须确定类型ip=(int*)vp;//类型强制转换,void类型指针赋值给int类型指针cout*ip=*ipendl;return0;}【例3-10】//example3_10.cpp#includestudent.hintmain(){Students1;//定义Student类的对象s1s1.input(8410101,ZhangHua,95);//通过s1访问公有成员函数s1.display();//通过对象访问公有成员函数Student*pstu=&s1;//定义Student类的对象指针pstu,并指向对象s1pstu-input(8410105,WangLi,90);//通过指针访问公有成员函数pstu-display();//通过指针访问公有成员函数(*pstu).modify(85);(*pstu).display();return0;}【例3-11】//example3_11.cpp#includeiostreamusingnamespacestd;classBox{public:Box();Box(inth,intw,intlen):height(h),width(w),length(len){}intvolume();~Box();private:intheight;intwidth;intlength;};Box::Box(){height=10;width=10;length=10;}Box::~Box(){coutDestructoriscalledendl;}intBox::volume(){return(height*width*length);}intmain(){Box*pbox1=newBox;//定义指向Box堆对象的指针变量pbox1,coutThevolumeofbox1ispbox1-volume()endl;deletepbox1;//释放pbox1指向的对象空间Box*pbox2=newBox