1005面向对象程序设计实验.docx
- 文档编号:9687338
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:42
- 大小:255.71KB
1005面向对象程序设计实验.docx
《1005面向对象程序设计实验.docx》由会员分享,可在线阅读,更多相关《1005面向对象程序设计实验.docx(42页珍藏版)》请在冰点文库上搜索。
1005面向对象程序设计实验
面
向
对
象
程
序
设
计
实
验
指
导
书
实验一类和对象
实验目的及要求:
掌握类的定义,根据具体需求设计类
深入理解C++中类的封装性。
会根据类创建各种对象
掌握对象的各种成员的使用方法。
实验学时:
3
实验器材:
微型计算机
实验内容:
下面的一段程序实现在程序中定义一个名为angle的类。
(必做)
#include
#include
constdoubleANG_TO_RAD=0.0174532925; //定义弧度之间的转换比例,即弧度的值
classangle //定义类angle
{
doublevalue; //类angle的私有成员数据
public:
voidSetValue(double);
doubleGetSine(void); //声明类angle的对象deg
}deg;
voidangle:
:
SetValue(doublea) //类angle的成员函数SetValue的具体实现
{
value=a;
}
doubleangle:
GetSine(void) //类angle的成员函数GetSine的具体实现
{
doubletemp;
temp=sin(ANG_TO_RAD*value);
returntemp;
}
voidmain()
{
deg.SetValue(60.0); //给类angle的成员变量value赋值
cout<<"Thesineoftheangleis:
";
cout< } 定义一个满足如下要求的Date类。 (选做) 用下面的格式输出日期: 日/月/年 可运行在日前上加一天操作 设置日期。 代码如下: #include classDate{ public: voidDisplay(); voidAddOneDay(); voidSetDay(inty,intm,intd); protected: boolLegal(inty,intm,intd); boolIsLeapYear(inty); intyear; intmonth; intday; }; voidDate: : Display() { cout< } voidDate: : AddOneDay() { if(Legal(year,month,day+1)) day++; elseif(Legal(year,month+1,1)) month++,day=1; elseif(Legal(year+1,1,1)) day=1,month=1,year++; } voidDate: : SetDay(inty,intm,intd) { if(Legal(y,m,d)) day=d,month=m,year=y; } boolDate: : Legal(inty,intm,intd) { if(y>9999||y<1||d<1||m<1||m>12) returnfalse; intdayLimit=31; switch(m)case4: case6: case9: case11: dayLimit--; if(m==2)dayLimit=IsLeapYear(y)? 29: 28; return(d>dayLimit)? false: true; } boolDate: : IsLeapYear(inty) { return! (y%4)&&(y%100)||! (y%400); } intmain() { Dated; d.SetDay(2010,2,28); d.Display(); d.AddOneDay(); d.Display(); system("PAUSE"); } 运行结果: 实验二重载 实验目的及要求: 掌握运算符重载的概念及使用方法,掌握特殊运算符的重载要求和方法。 实验学时: 3 实验器材: 微型计算机 实验内容: #include #include #include classMy_class { public: intplus(int,int); doubleplus(double,double); }; intMy_class: : plus(intx,inty) { returnx+y; }; doubleMy_class: : plus(doublex,doubley) { returnx+y; }; voidmain() { My_classData; cout<<"theresultforplus(int,int)is: "< cout<<"theresultforplus(double,double)is: "< } 实验三继承与派生 实验目的及要求: 理解继承的概念,学习如何使用基类成员,了解基类成员在派生类中的访问控制;理解类的派生对代码复用的作用; 实验学时: 3 实验器材: 微型计算机 实验内容: 下面的程序中定义的类继承基类实现多重继承(必做) #include ClassBase1 {protected; Intm_B1; Public; VoidSetm_B1(intx) { m_B1=x; } }; ClassBase2 { protected; intm_B2; public; voidSetm_B2(intx) { m_B2=x; } }; classMultiDerived: publicBase1,publicBase2 { public: voidGetB1B2(void) { intResult; Result=m_B1+m_B2; cout<<"m_B1+m_B2="; cout< } }; voidmain(void) { MultiDerivedM; M.Setm_B1(15); M.Setm_B2(35); M.GetB1B2(); } 设计一个人员类person和一个日期类date,由人员类派生出学生类Student和教师类professor,学生类和教师类的数据成员birthday为日期类。 (选做) #include #include usingnamespacestd; classdate { public: date() { cout<<"Birthday: "; cin>>year>>month>>day; } voiddisplay() { cout< } private: intyear; intmonth; intday; }; classperson { protected: char*name; public: person(); }; person: : person() { charnamestr[50]; cout<<"Name: "; cin>>namestr; name=newchar[strlen(namestr)+1]; strcpy(name,namestr); } classstudent: publicperson { private: intID; intscore; datebirthday; public: student() { cout<<"studentID: "; cin>>ID; cout<<"studentscore: "; cin>>score; } voiddisplay() { cout<<"Thebasicinformation: "< cout< birthday.display(); cout< } }; classprofessor: publicperson { private: intNo; charmajor[10]; datebirthday; public: professor() { cout<<"TeacherID: "; cin>>No; cout<<"schoolteachingmajor: "; cin>>major; } voiddisplay() { cout<<"Thebasicinformation: "< cout<<"\t"< birthday.display(); cout< } }; intmain() { studentstu; stu.display(); professorprof; prof.display(); system("PAUSE"); return0; } 运行结果: 实验四WINDOWS文本输出方法与字体的设置。 实验目的及要求: 学时3 熟悉获取字体句柄方法。 应用相关函数实现对字体颜色及背景色进行设置。 实验学时: 3 实验器材: 微型计算机 实验内容: 5-55-6 创建不同字体、使用不同颜色输出字符串 #include #include #include longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam);//消息处理函数声明. BOOLInitWindowsClass(HINSTANCEhInstance);//初始化窗口类声明 BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);//初始化窗口声明. intCALLBACKpEnumFontFamProc( ENUMLOGFONTFAR*lpelf,//pointertological-fontdata NEWTEXTMETRICFAR*lpntm,//pointertophysical-fontdata intFontType,//typeoffont LPARAMlParam//pointertoapplication-defineddata ); HWNDhWndMain;//定义窗口句柄. intiFontSign=0;//定义字体标志,表示采用何种字体. intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRlpCmdLine, intnCmdShow)//主函数 { MSGMessage; if(! InitWindowsClass(hInstance))//初始化窗口类. returnFALSE; if(! InitWindows(hInstance,nCmdShow))//初始化窗口. returnFALSE; while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message);//消息循环. DispatchMessage(&Message); } returnMessage.wParam; } longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam)//消息处理函数. { HDChDC;//定义设备环境句柄. HFONThF;//定义字体句柄. PAINTSTRUCTps;//定义包含绘图信息的结构体变量 TEXTMETRICtm;//定义包含字体信息的结构体变量. staticcharlpsz_1[]="只有付出才有收获";//定义输出的字符串. charchFont[20];//定义字体种类的字符串. intX=0,Y=0,i; staticintnCharlen=strlen(lpsz_1);//定义字符串长度变量. switch(iMessage) { caseWM_PAINT: //处理绘图消息. hDC=BeginPaint(hWnd,&ps);//获得设备环境指针. for(i=0;i { SetTextColor(hDC,RGB((long)(255.0/nCharlen*i),//设置字体颜色. 0, 0)); if(iFontSign%5==0)strcpy(chFont,"楷体");//设置包含字体信息的字符串. elseif(iFontSign%5==1)strcpy(chFont,"宋体");//iFont%表示以5为周期循环改变字体. elseif(iFontSign%5==2)strcpy(chFont,"隶书"); elseif(iFontSign%5==3)strcpy(chFont,"黑体"); elsestrcpy(chFont,"幼圆"); hF=CreateFont(//定义字体句柄. (long)(8+32.0*i/nCharlen),//字体高度. 0,//由系统根据高宽比选取字体最佳宽度值. 0,//文本倾斜度为0,表示水平. 0,//字体倾斜度为0. 400,//字体粗度.400为正常. 0,//非斜体字, 0,//无下划线. 0,//无删除线. GB2312_CHARSET,//表示所用的字符集为GB2312_CHARSET OUT_DEFAULT_PRECIS,//删除精度为缺省值. CLIP_DEFAULT_PRECIS,//裁剪精度为缺省值. DEFAULT_QUALITY,//输出质量为缺省值. DEFAULT_PITCH|FF_DONTCARE,//字间距和字体系列使用缺省值. chFont);//字体名称. SelectObject(hDC,hF);//选入字体. GetTextMetrics(hDC,&tm);//得到包含字体信息的结构体. X=X+tm.tmAveCharWidth*2;//设置输出字符的X坐标. Y=iFontSign%5*40+tm.tmExternalLeading;//设置输出字符的Y坐标. TextOut(hDC,X,Y,&lpsz_1[i],2);//输出第i个字符.产生滚动的效果. Sleep(400);//暂停0.4秒. DeleteObject(hF);//删除字体句柄. } iFontSign++;//字体标志增加 InvalidateRect(hWnd,NULL,1);//刷新用户区. EndPaint(hWnd,&ps);//删除设备用户指针. return0; caseWM_DESTROY: PostQuitMessage(0); return0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } } BOOLInitWindows(HINSTANCEhInstance,intnCmdShow) { HWNDhWnd; hWnd=CreateWindow("5_5",//窗口类名称. "字体显示实例程序",//标题栏名称. WS_OVERLAPPEDWINDOW,//窗口样式.有标题栏和最大最小化按钮. CW_USEDEFAULT,//窗口左上角坐标. 0, CW_USEDEFAULT,//采用缺省的高度和宽度. 0, NULL,//无父窗口. NULL,//无菜单. hInstance,//当前应用实例句柄. NULL);//指向传递给窗口的参数的指针.不用. if(! hWnd)//创建失败. returnFALSE; hWndMain=hWnd;//给全局窗口句柄付值. ShowWindow(hWnd,nCmdShow);//显示窗口. UpdateWindow(hWnd);//刷新用户区. returnTRUE; } BOOLInitWindowsClass(HINSTANCEhInstance) { WNDCLASSWndClass; WndClass.cbClsExtra=0;//无窗口类扩展. WndClass.cbWndExtra=0;//无窗口实例扩展. WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));//背景为白色. WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);//光标为为箭头. WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//采用缺省图标. WndClass.hInstance=hInstance;//当前实例. WndClass.lpfnWndProc=WndProc;//消息处理函数. WndClass.lpszClassName="5_5";//窗口类名称. WndClass.lpszMenuName=NULL;//无菜单. WndClass.style=0;//缺省窗口风格. returnRegisterClass(&WndClass);//返回窗口注册值. } 实验五WINDOWS应用程序对键盘与鼠标的响应 实验目的及要求: 设计一个窗口,完成键盘响应。 实验学时: 3 实验器材: 微型计算机 实验内容: #include #include #include longWINAPIWndProc(HWNDhWnd, UINTiMessage, UINTwParam, LONGlParam);//消息处理函数声明. BOOLInitWindowsClass(HINSTANCEhInstance);//初始化窗口类声明 BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);//初始化窗口声明. HWNDhWndMain; intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRlpCmdLine, intnCmdShow)//主函数 { MSGMessage; if(! InitWindowsClass(hInstance))//初始化窗口类. returnFALSE; if(! InitWindows(hInstance,nCmdShow))//初始化窗口. returnFALSE; while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message);//消息循环. DispatchMessage(&Message); } returnMessage.wParam; } longWINAPIWndProc(HWNDhWnd, UINTiMessage, UINTwParam, LONGlParam)//消息处理函数. { HDChDC;//定义设备环境句柄. PAINTSTRUCTps;//定义包含绘图信息的结构体变量 HPENhPen;//定义画笔句柄。 HBRUSHhBrush;//定义画刷句柄 //定义输出的字符串。 staticcharcUp[]="YouhadhittedtheUPkey"; staticcharcCtrl[]="YouhadhittedtheCtrlkey"; staticcharcS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1005 面向 对象 程序设计 实验