解析C例题代码第3章例题(共28页).doc

上传人:飞****2 文档编号:13921854 上传时间:2022-05-02 格式:DOC 页数:28 大小:95.50KB
返回 下载 相关 举报
解析C例题代码第3章例题(共28页).doc_第1页
第1页 / 共28页
解析C例题代码第3章例题(共28页).doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《解析C例题代码第3章例题(共28页).doc》由会员分享,可在线阅读,更多相关《解析C例题代码第3章例题(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上第3章例题【例3-1】/employee2.h#include #include using namespace std;class Employee /定义Employee类public:Employee(); /构造函数的声明 void Setname(string); /设置姓名函数 void Setpay(float pay); /设置工资函数 string Getname();/提取姓名函数void Display();/显示信息函数protected:string name; /姓名int no; /编号float salary; /月工资 static

2、int maxno; /静态数据成员,表示员工编号基数;/employee2.cpp#include employee2.hint Employee:maxno=1000; /静态数据成员初始化Employee:Employee() /构造函数的实现 no=+maxno;void Employee:Setname(string namep) /设置姓名函数,指针作函数参数 name=namep;void Employee:Display()/显示信息函数 cout编号为:no,本月工资为:salaryendl;string Employee:Getname()/提取姓名函数return nam

3、e;void Employee:Setpay(float pay)/设置工资函数salary=pay;/example3_34.cpp#include employee2.hint main() Employee employy4; /创建对象数组float pay;string nameptr;/字符数组int i;for(i=0;i4;i+)coutnameptr;employyi.Setname(nameptr);coutpay;employyi.Setpay(pay);for(i=0;i4;i+)coutemployyi.Getname()的;employyi.Display();re

4、turn 0;【例3-2】/example3_2.cpp#include using namespace std;void f1()int a=1,b=2; static int c; a+; b+; c+; couta b cendl;int main() int a=1,b=2,c=3; f1(); f1(); f1(); couta b cendl; return 0;【例3-3】/example3_3.cpp#include using namespace std; int main()int *iptr; /声明 int型指针 iptrint i; /声明int型数 iiptr=&i

5、; /取 i的地址赋给 iptri=100; /int型数赋初值coutOutput int i= i endl; /输出int型数的值coutOutput int pointer i=*iptrendl;/输出指针所指地址的内容return 0;【例3-4】/example3_4.cpp#include using namespace std;int main()int *a=new int; /在堆中分配int型变量所需空间,并将起始地址赋给指针a*a=76; /将76存入指针a指向的内存空间cout*aendl; /输出指针a指向的内存空间的值delete a;/释放a指向的动态存储空间

6、return 0;【例3-5】/example3_5.cpp#include using namespace std;int main()int arraysize;int *array;coutarraysize;if(array=new intarraysize)=NULL) /申请一块连续的存储空间coutCant allocate memory, terminating.;/未分配到存储空间exit(1); /发生错误,退出程序for(int count=0;countarraysize;count+)arraycount=count*2; coutarraycount ;couten

7、dl;delete array; /释放array指向的连续存储空间return 0;【例3-6】/example3_6.cpp#include using namespace std;struct list/结构体int data;list *next;class Queue/队列类public:Queue()/构造函数ptrf=ptrb=NULL; /将两个指针初始化为空void enqueue(int); /入队函数int dequeue(); /出队函数private:list *ptrf; /队首指针list *ptrb;/队尾指针;void Queue:enqueue(int x)

8、 /入队函数的实现list *newnode=new list; /动态分配内存 newnode-data=x;newnode-next=NULL;if(ptrb=NULL) /队空时入队的情况,如图3-4所示ptrf=ptrb=newnode;else /队非空时入队的情况,如图3-5所示ptrb-next=newnode; ptrb=newnode;int Queue:dequeue() /出队函数的实现list *tmp;int value;value=ptrf-data;tmp=ptrf;ptrf=ptrf-next; /出队后的情况如图3-6所示delete tmp;return v

9、alue; /返回出队的数据项int main()Queue A; /队列对象Aint arr=2,3,4,5,7; cout入队顺序:;for(int i=0;i5;i+)coutarri ;A.enqueue(arri); /将数组元素作为数据项依次入队coutendl出队顺序:;for(i=0;i5;i+)coutA.dequeue() ; /将队列中数据项依次出队coutendl; return 0;【例3-7】/student.h#include using namespace std;class Student /学生类的声明 int id; /私有数据成员,外部不可见char n

10、ame10; float score; /为了简化程序,只保留了一个学生成绩public: /公有成员函数,外部接口void input(int pid,char *pname,float s);void modify(float s);void display();/student.cpp#include student.hvoid Student:input(int pid,char *pname,float s) /成员函数的实现id=pid;strcpy(name,pname);score=s;void Student:modify(float s)score=s; void Stud

11、ent:display() cout id:idendl; /虽在类外,成员函数仍可访问私有成员cout name:nameendl;coutscore:scoreendl;/example3_7.cpp#include student.hint main()Student *pstu=new Student; /动态申请内存空间(*pstu).input(,Wang Li,90); /通过堆对象访问公有成员函数(*pstu).display(); /通过堆对象访问公有成员函数(*pstu).modify(85); /通过堆对象访问公有成员函数(*pstu).display(); /通过堆对象

12、访问公有成员函数delete pstu;return 0;【例3-8】/example3_8.cpp#include using namespace std; namespace myown1 /定义名字空间myown1char *user_name=myown1;/在名字空间myown1中定义指针名user_namenamespace myown2 /定义名字空间myown2char *user_name=myown2;/在名字空间myown2中定义指针名user_nameint main()coutHello, myown1:user_name /用名字空间限制符访问变量user_name

13、. and goodbye!endl;cout Hello, myown2:user_name /用名字空间限制符访问变量user_name. and goodbye!endl;return 0;【例3-9】/example3_9.cpp#include using namespace std;/void v; /错误,不能声明void类型的变量void *vp; /正确,可以声明void类型的指针int main()int *ip;int i=10;vp=&i; /void类型指针指向整型变量/cout*vp=*vpendl;/错误,void型指针在使用前必须确定类型ip=(int *)vp

14、; /类型强制转换, void类型指针赋值给int类型指针cout*ip=*ipinput(,Wang Li,90); /通过指针访问公有成员函数pstu-display(); /通过指针访问公有成员函数(*pstu).modify(85); (*pstu).display();return 0;【例3-11】/example3_11.cpp#include using namespace std;class Boxpublic:Box(); Box(int h,int w ,int len):height(h),width(w),length(len)int volume();Box();p

15、rivate:int height;int width;int length;Box:Box() height=10;width=10;length=10;Box:Box() coutDestructor is calledendl;int Box:volume()return(height*width*length);int main()Box *pbox1=new Box; /定义指向Box堆对象的指针变量pbox1,coutThe volume of box1 is volume()endl;delete pbox1; /释放pbox1指向的对象空间Box *pbox2=new Box(

16、15,30,25);/定义指向Box堆对象的指针变量pbox2, /在pbox2中存放堆对象的起始地址并初始化堆对象 coutThe volume of box2 is volume()endl;/指针访问成员delete pbox2; /释放pbox2指向的对象空间return 0; 【例3-12】/example3_12.cpp#include using namespace std;void swap(int *x,int *y) /形参为指针int *temp; temp=*x;*x=*y;*y=temp;int main() int a=1,b=2; /定义变量coutBefore

17、Swap a=a,b=bendl; swap(&a,&b); /函数调用 coutAfter Swap a=a,b=bendl; return 0;【例3-13】/example3_13.cpp#include using namespace std;class CStrtemppublic: CStrtemp(char *s); CStrtemp(const CStrtemp&); /复制构造函数,省略形参 CStrtemp(); /析构函数 void show(); /成员函数 void set(char *s); /赋值新串函数private: char *str; /私有数据成员;CS

18、trtemp:CStrtemp(char *s)coutconstructor.endl;str=new charstrlen(s)+1; /动态申请内存单元,见3.2.3节if(!str)cerrAllocationg Errorendl;/cerr是标准流对象,参看第8章exit(1);/发生错误,退出程序strcpy(str,s); /将字符串复制到str指向的存储空间中CStrtemp:CStrtemp(const CStrtemp& temp) /复制构造函数的实现 coutcopy constructor.endl; str=new charstrlen(temp.str)+1;

19、if(!str) cerrerror in apply new space.endl; exit(1); /发生错误,退出程序 strcpy(str,temp.str);CStrtemp:CStrtemp() /析构函数coutdestructor.endl;if(str!=NULL)delete str; /释放str指向的存储空间void CStrtemp:show() /成员函数coutstrendl;void CStrtemp:set(char *s) /成员函数的实现 delete str; /释放str指向的存储空间 str=new charstrlen(s)+1; if(!str

20、) cerrAllocation Errorendl; exit(1); /发生错误,退出程序 strcpy(str,s);CStrtemp Input(CStrtemp *temp) /对象指针用做函数参数 char s20; couts; /输入新字符串 temp-set(s); /指针访问成员函数 return *temp; /返回指针所指向的对象int main() CStrtemp A(hello); /用字符串hello初始化对象A A.show(); CStrtemp B=Input(&A); /用对象指针所指向的对象初始化对象B A.show(); B.show(); retu

21、rn 0;【例3-14】/point.h #include #include using namespace std; class point /声明类 public: point(double=0,double=0);/构造函数 double Getx(); /成员函数原型 double Gety(); void Setxy(double,double); point(); private: double x,y; ; const int num=10; /申请数量 void Set(point *); /普通函数原型 void Display(point *);double Lenth(p

22、oint *); /point.cpp#includepoint.h /定义类的成员函数 point:point(double a,double b) x=a; y=b; double point:Getx() return x; double point:Gety() return y; void point:Setxy(double a,double b) x=a; y=b; point:point() coutdelete it:x,yendl; /example3_14.cpp#includepoint.h int main() point *p=new point10;/申请10个对

23、象的内存 if(p=NULL) /如果没有申请到,则退出程序 cout地址申请失败,结束程序运行。n; return 0; Set(p); /调数据输入函数 cout内存块的数据如下:endl; Display(p); /显示数据 cout组成的折线长度为:; coutLenth(p)endl; /输出折线长度 delete p; /释放内存 return 0; /给内存块赋值的函数 void Set(point *p) double a,b; for(int i=0;inum;i+) coutInput 第i+1ab; (p+i)-Setxy(a,b); /给申请的内存块赋值 /显示内存块的

24、值的函数 void Display(point *p) for(int i=0;inum;i+) coutGetx(),Gety()Getx(); /保存第一个点坐标的x值 b1=p-Gety(); /保存第一个点坐标的y值 for(int i=1;iGetx(); /取下一点的x坐标 b2=(p+i)-Gety(); /取下点的Y坐标 sum=sum+sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2); /累计长度 a1=a2; /依次平移 b1=b2; /依次平移 return sum; 【例3-15】/example3_15.cpp#include using nam

25、espace std;class Boxpublic: Box(int h=10,int w=12,int len=15):height(h),width(w),length(len) /带默认参数的构造函数,含成员初始化表int volume();private: int height; int width; int length;int Box:volume()return(height*width*length); int main() Box a,b(15,18,20),c(16,20,26); coutvolume of a is a.volume()endl; coutvolume

26、 of b is b.volume()endl; coutvolume of c is c.volume()endl; return 0;【例3-16】/example3_16.cpp#include using namespace std;class Testpublic:Test(int=0);void print();private:int x;Test:Test(int a) x=a;void Test:print()coutx=xx=x n(*this).x=(*this).xendl;int main() Test t(12);t.print();return 0;【例3-17】/

27、example3_17.cpp#include using namespace std;class Apublic:A()i=0; void add()i+;A *sp()return this; /定义指针函数sp(),显式使用thisint Is(A *s)return s-i; /通过对象指针访问私有数据成员private: int i; ;A *p2; /定义全局对象指针数组p2int main()A a1,*a2=new A; /定义对象指针a2p0=a1.sp();p1=a2;p0-add(); /通过对象指针访问公有成员函数a2-add();p1-add();couta1-thi

28、s:p0 a2-this:p1endl;couti-(a1):Is(p0) i-(a2):Is(p1)endl;return 0;【例3-18】/example3_18.cpp#include using namespace std;class Point public: Point(int xx=0,int yy=0)X=xx;Y=yy;/构造函数 int GetX()return X; int GetY()return Y;private: int X,Y;int main() Point A(4,5);/声明对象A Point *p1=&A;/声明对象指针并初始化 int (Point:

29、*pGetX)()= Point:GetX;/声明成员函数指针并初始化 cout(A.*pGetX)() t; /使用成员函数指针访问成员函数 coutGetX)() t; /使用对象指针访问成员函数 coutA.GetX()endl;/使用对象名访问成员函数 return 0;【例3-19】/example3_19.cpp#include using namespace std;class Point public: Point(int xx=0,int yy=0)X=xx;Y=yy;count+;/构造函数 Point(const Point &p);/复制构造函数的声明 int GetX

30、()return X; int GetY()return Y; static int count;/静态数据成员private: int X,Y; ;int Point:count=0;/静态数据成员的初始化Point:Point(const Point &p) /复制构造函数的实现 X=p.X; Y=p.Y; count+;int main()/主函数 int *countp=&Point:count;/声明一个int型指针,指向类的静态成员 Point A(4,5);/声明对象A cout Point A: A.GetX(),A.GetY();/通过对象访问成员函数 cout Object

31、 id= *countpendl;/通过指针访问静态数据成员 Point B(A);/声明对象B cout Point B: B.GetX(),B.GetY(); cout Object id= *countpendl;/通过指针访问静态数据成员 return 0;【例3-20】/example3_20.cpp#include using namespace std;class Point public: Point(int xx=0,int yy=0)X=xx;Y=yy;count+;/构造函数 Point(const Point &p);/复制构造函数 int GetX()return X

32、; int GetY()return Y; static void GetC()cout Object id= countendl;/静态成员函数private: int X,Y; static int count;/静态数据成员的初始化;Point:Point(const Point &p) X=p.X; Y=p.Y; count+;int Point:count=0; /静态数据成员的初始化int main()/主函数 void (*gc)()=Point:GetC;/声明一个指向函数的指针,指向类的静态成员函数 Point A(4,5);/声明对象A coutPoint A: A.Get

33、X(),A.GetY(); gc();/通过指针访问静态成员函数 Point B(A);/声明对象B coutPoint B: B.GetX(),B.GetY(); gc();/通过指针访问静态成员函数 return 0;【例3-21】/example3_21.cpp#include using namespace std;int main() int a=5,b=5; int *ptr = &b; /定义并初始化指针 int & ref = a; /定义并初始化引用 *ptr += 2; ref += 2; couta = aendl; coutb = bendl;【例3-22】/example3_22.cpp#include using namespace std;int main() int *ptr,a=10,b = 20; /定义指针

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁