面向对象程序设计实验报告_第1页
面向对象程序设计实验报告_第2页
面向对象程序设计实验报告_第3页
面向对象程序设计实验报告_第4页
面向对象程序设计实验报告_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南昌航空高校试验报告二年月日课程名称:面对对象程序设计B 试验名称:类与结构班级:XXXXXXX同学姓名:XXXXXX学号:指导老师评定:XX签名:XXXXX1、试验目的学习把握声明和定义类及成员。学习把握访问类对象成员。学习把握爱护数据如何屏蔽外部访问的原理,更好的熟悉类的封装2、试验内容定义一个满意下列要求的Date类:①用下面的格式输出日期:日/月/年②可运行在日期上加一天操作③设置日期//Date,h^include<iostream.h>classDate{public:voidDisplay();voidAddOneDay();voidSetDay(inty,int叫intd);protected:boolLegal(inty,intm,intd);boolIsLeapYear(inty);intyear;intmonth;intday;};voidDate::Display(){cout<<day<<"/"<<month<<"/"<<year<<endl;voidDate::AddOneDay()if(Legal(year,month,day+1))day++;elseif(Legal(year,month+1,1))month++,day=l;elseif(Legal(year+1,1,1))day=l,month=1,year++;voidDate::SetDay(inty,intm,intd){if(Legal(y,m,d))day=d,month=m,yearly;boolDate::Legal(inty,intm,intd){if(y>9999||y<l||d<l||m<l||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);定义一个时间类Time,能供应和设置由时、分、秒组成的时间,并编出应用程序,定义时间对象,设置时间,输出该对象供应的时间。并将类定义作为接口,用多文件结构实现之。//Time,hclassTime(public:TimeO;voidPrint();voidSet(int,int,int);protected:intmin;intsec;inthour;};//time,cpp4include<iostream.h>^include"Time.h"Time::TimeO{ min=23;sec=20;hour=18;voidTime::Print(){cout<<hour«min«*:*<<sec«endl;voidTime::Set(ints,intm,inth){min=m;sec=s;hour=h;//test,cpp#include<iostream.h>#include"Time.h"voidmain(){intm,s,h;Timetime;cout〈〈“Nowthetimeis:"<<endl;time.Print();cout«,zPleaseinputthetime:(sec/min/hour)*«endlcin»s»m»h;while(s<0||s>=60||m<0||m>=60Ih<0||h>24)cout<<"Pleaseinputagain:"<<endl;cin>>s»m>>h;time.Set(s,m,h);cout<</zThetimeofbeingchangedis:“«endl;time.Print();南昌航空高校试验报告二年月日课程名称:面对对象程序设计B试验名称:静态成员与友元班级:XXXXXXX同学姓名:XXXXXX学号:指导老师评定:XX签名:XXXXX1、试验目的学习友元函数的定义和原理。学习静态数据成员和静态成员函数的使用。学习静态成员代替全局变量实现对象间的共享。2、试验内容(1)有如下类的定义。类成员函数copy用于实现两个对象的相互拷贝,请完成该函数的实现。(有两种方法即不用this指针和用this指针),并采用友员函数实现copy.#include<iostream.h>classMyclass{public:Myclass(inta,intb){x=a;y=b;}voidcopy(Myclass&my);voidprint(){cout«ux=,,«x«endl;cout«,,y=,,<<y«endl;private:intx,y;voidmain(){Myclassmy(10,20),t(30,40);my.print();my.Copy(t);my.print();成员函数实现:#include<iostream.h>classMyclass{public:Myclass(inta,intb){x=a;y=b;}voidcopy(Myclass&my);voidprint(){cout«',x=,,«x«endl;cout«ny=,,«y«endl;private:intx,y;voidMyclass::copy(Myclass&my){x=my.x;//this->x=my.x;y=my.y;//this->y=my.y;voidmain(){Myclassmy(l0,20)4(30,40);my.print();my.copy⑴;my.print();友员函数实现:#include<iostream.h>classMyclass{public:Myclass(inta,intb){x=a;y=b;}friendvoidcopy(Myclass&o,Myclassy);voidprint(){cout«Hx="«x«endl;cout«Hy=n«y«endl;private:intx,y;voidcopy(Myclass&o,Myclassy){o.x=y.x;o.y=y.y;voidmain(){Myclassmy(l0,20),t(30,40);my.print();copy(my,t);my.print();

(2)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要纪录下目前库存的货物的总重量和总价值。编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的状况。(本题目主要练习静态数据成员的使用,定义私有变量存每件货物的价格和重量,用静态数据成员存货物的总重量和总价钱,定义构造函数和析构函数,当定义新的对象完成初始化的功能和删除对象时,从总重量和总价钱中减去对象的重量和价格)//Menu,h#ifndefMENU_HttdefineMENU_HclassMenu{public:intshow();#endif;//Carlo,hclassCarlo{public:Carlo(doubleWeight=0,doublePrice=0);virtualvoid"Carlo();virtualvoidSetCarlo(double=0,double=0);constdoubleconstdoublevoidvoidvoid&GetCurrentTotalWeight()&GetCurrentTotalPrice()BuyBox();SellBoxO;ShowBoxInfor()const;constdoubleconstdoublevoidvoidvoid&GetCurrentTotalWeight()&GetCurrentTotalPrice()BuyBox();SellBoxO;ShowBoxInfor()const;const;const;protected:staticdoublestaticdoubleTotalWeight;TotalPrice;private:doubleBoxWeight;staticdoublestaticdoubleTotalWeight;TotalPrice;private:doubleBoxWeight;doubleBoxPrice;);//Carlo,cpp^include<iostream.h>^include"Carlo,h”doubleCarlo::TotalPrice=0.0;doubleCarlo::TotalWeight=0.0;Carlo::Carlo(doubleWeight,doublePrice){BoxWeight=Weight;BoxPrice=Price;TotalPrice+=Weight*Price;TotalWeight+=Weight;voidCarlo::BuyBox(){system("cls");Carlocarlo;doubleWeight,Price;cout<〈"请输入进货的重量和价格:”;cin>>Weight»Price;carlo.SetCarlo(Weight,Price);{returnTotalPrice;constdouble&Carlo::GetCurrentTotalWeight()const{returnTotalWeight;voidCarlo::SetCarlo(doubleWeight,doublePrice){BoxWeight=Weight;BoxPrice=Price;TotalPrice+=Weight*Price;TotalWeight+=Weight;voidCarlo::SellBox(){system("cls");doubleWeight,Price;cout<<〃输入出货的重量和单价:〃;cin>>Weight»Price;while(Weight<0||Price<0){cout。”参数不对,请重新输入:〃;cin»Weight»Price;if((Weight*Price>TotalPrice)Weight>TotalWeightITotalPrice<0){cout<<"存货不够多;cin.get0;cin.get();else{TotalPrice-=Weight*Price;TotalWeight-=Weight;cout«*出货完成!”;cin.get();cin.get();voidCarlo::ShowBoxInfor()const{system(*cls,z);cout<<〃库中的存货总重量为:〃;cout.precision(6);cout.setf(ios_base::showpoint);cout<<GetCurrentTotalWeight()<<endl;cout<<”库中的存货总价钱为:";cout.precision(6);cout«GetCurrentTotalPrice0;cin.get();cin.get();Carlo::"Carlo。ttinclude<iostream.h>#include<windows.h>ttinclude"Menu,h”intMenu::show(){system(^cls");intchioce;cout«*\n\n\n\n\n\t\t\t*«*\>\>\>*;cout<<“进出货演示"<<"\<\<\<"<<endl<<endl;cout«"\t\t\t"«"l,进货登记."<<endl«endl;cout«"\t\t\t"<<"2,出货登记,"<<endl<<endl;cout<<"\t\t\t"<<”3.猎取库存信息.”<<endl<<endlcout«"\t\t\t"<<"4.退出.〃<<endl<<endl;cout«"\t\t\t"<<”请选择操作:";cin»chioce;return(chioce);#include<iostream.h>#include"Menu,h”ttinclude“Carlo,h”voidmain(){Menumenu;Carlocarlo;intchioce;while((chioce=menu.show())-4){switch(chioce){case1:carlo.BuyBox();break;carlo.SeiIBox();break;carlo.ShowBoxInfor();break;南昌航空高校试验报告二年月日课程名称:面对对象程序设计B 试验名称:构造函数与析构函数班级:XXXXXXX 同学姓名: XXXXXX学号:指导老师评定: XX签名:XXXXX1、试验目的理解类与对象的区分。学习把握定义构造函数与析构函数的方法。学习把握默认构造函数的意义。了解类成员初始化,把握构造与析构类成员的方式。2、试验内容(1)创建一个Employee类,该类中用字符数组存放Employee的信息,如姓名、地址、市、省、及邮政编码;每个成员函数的定义放在类定义之外;成员函数包括转变姓名数据成员等;构造函数完成成员数据的初始化;用Display。函数将完整的对象数据打印出来;其中数据成员是爱护的,成员函数是公共的。#include<iostream.h>#include<string.h>#include<stdio.h>classEmployee…Employee(charn[20],chara[50],chars[20],charsh[20],charp[6]);voidChangeName(charch_name[20]);voidDisplay();protected:charname[20];charaddress[50];charshi[20];charsheng[20];charpost[6];1;Employee::Employee(charn[20],chara[50],chars[20],charsh[20],charp[6])strcpy(name,n);strcpy(address,a);strcpy(shi,s);strcpy(sheng,sh);strcpy(post,p);voidEmployee::ChangeName(charch_name[20])strcpy(name,chname);voidEmployee::Display()<<"address:"<<address«endl<<"shi:"<<shi«endl<<"sheng:"<<sheng<<endl<<"post:"«post«endl;voidmain()Employeeem(*rerr34t3","5WestSt.","Revere","CA","12290");em.Display();em.ChangeName(*sdfesfefe^);em.Display();(2)设ti•个表示矩形的类Rect,其矩形成员长float*Length,宽float*Width为指针变量,设计相应成员函数,实现下列功能:①构造函数设置长和宽(默认为1)。②复制构造函数用老对象生成新对象。③set。函数设置长和宽(默认为0)。④计算并返回长方形的周长。⑤计算并返回长方形的面积。⑥析构函数释放动态安排的长和宽。编制主程序应用指针建立对象测试类。#include<iostream.h>classRect{float*Length,*Width;public:Rect(floata=l,floatb=l);Rect(Rect&);voidset(floata=0,floatb=0);floatperi();floatarea();Rect(){deleteLength;deleteWidth;}};Rect::Rect(floata,floatb){Length=newfloat;Width=newfloat;"Length=a;*Width=b;Rect::Rect(Rect&x){Length=newfloat;Width=newfloat;*Length=*x.Length;*Width=*x.Width;cout<<"执行复制构造函数”<<endl;voidRect::set(floata,floatb){*Length=a;*Width=b;}floatRect::peri(){return(*Length+*Width)*2;}floatRect::area(){return(*Length)*(*Width);}〃主函数voidmain(){Rectrl(55.5,40);cout《<”周长为:*«rl.peri()<<”面积为:*«rl.area()«endl;cout«,z \n”;Rect*p=newRect(rl);〃思索:此处改为Rect*p=newRect;下一行的输出会是什么结果cout<<"周长为:"<<p->peri()<<"面积为:"<<p->area()«endl;p->set(20.5,13);cout<<“周长为:"/<<p->peri()<<"面积为:"<<p->area()«endl;南昌航空高校试验报告二年月日课程名称:面对对象程序设计B 试验名称:继承与多态性班级:XXXXXXX 同学姓名: XXXXXX学号:指导老师评定: XX签名:XXXXX1、试验目的了解类的两种使用方式学习从现有类派生出新类的方式了解在派生类中如何使用基类的成员了解基类成员在派生类中的访问掌握了解虚函数对多态性的支持2,试验内容题目:应用多态设计同学类生成表示同学的类XS,供应成员函数dispXMO、dispXBO和dispNLO分别用来显示姓名、性别和年龄,并将他们全部定义为纯虚函数;生成CZS类表示学校生,包含数据成员xm、xb和nl表示同学的姓名、性别和年龄,供应成员函数dispXMO、dispXBO和dispNLO分别用来显示姓名、性别和年龄;再生成类GZS表示高中生和类DXS表示高校生,同样包含相同含义的数据成员xm、xb和nl,也包括成员函数dispXM()、dispXBO和dispNLO。试验要求①设计和实现基类XS。②设计和实现派生类CZS、GZS、DXS。③分别生成CZS、GZS、DXS类的对象。④将CZS、GZS,DXS类对象的地址赋给XS类的指针变量。⑤分别用XS类的指针和引用访问dispXMO、dispXBO和dispNLO函数。⑥观看程序结果。#include<iostream.h>ttinclude<string.h>〃设计抽象类(XS)表示同学类,定义其中dispXM(),dispXBO,dispNL()三个函数为纯虚函数classXS{public:virtualvoiddispXM()=0;virtualvoiddispXB()=O;virtualvoiddispNL()=0;/*定义CZS类,使其继承XS类,包含三个数据成员xm(4个以内汉字,默认名为“张三”)xb(int型,1表示男,0表示女,默认为D,nl(int型,默认为14);定义构造函数,初始化各数据成员.另:实现基类的三个纯虚函数,显示各数据成员.*/classCZS:publicXS{public:CZS(char*m="张三",intb=l,intn=14);voiddispXMO;voiddispXB();voiddispNLO;protected:charxm[9];intxb,nl;〃仿照上面的写法,定义高中生类(GZS)和高校生类(DXS)classGZS:publicXS{public:GZS(char*m=“张三”,intb=l,intn=17);voiddispXMO;voiddispXBO;voiddispNLO;protected:charxm[9];intxb,nl;classDXS:publicXS{public:DXS(char*m="张三”,intb=l,intn=20);voiddispXMO;voiddispXBO;voiddispNLO;protected:charxm[9];intxb,nl;〃实现上面CZS类的成员函数CZS::CZS(char*m,intb,intn){strcpy(xm,m);xb=b;nl=n;}voidCZS::dispXMO{cout〈〈endl<〈”学校生的姓名为:}voidCZS::dispXB(){cout«"\t性别:"<<(xb==l?〃男〃:"女");}voidCZS::dispNL(){cout«*\t年龄:〃实现上面GZS类的成员函数GZS::GZS(char*m,intb,intn){strcpy(xm,m);xb=b;nl=n;}voidGZS::dispXM(){cout<〈endl<<”高中生的姓名为:*«xm;}voidGZS::dispXB(){cout«"\t性别:"<<(xb=l?"男〃:"女〃);}voidGZS::dispNL(){cout«*\t年龄:"<<nl;}〃实现上面DXS类的成员函数DXS::DXS(char*m,intb,intn){strcpy(xm,m);xb=b;nl=n;}voidDXS::dispXM(){cout«endl<<”高校生的姓名为:"<<xm;}voidDXS::dispXB(){cout«*\t性别:"<<(xb=l?"男":"女");}voidDXS::dispNL(){cout«*\t年龄:"<<nl;}〃使用抽象基类的指针变量,编写通用displayPO函数voiddisplayP(XS*p)p->dispXM();p->dispXB();p->dispNL();〃使用抽象基类的引用变量,编写通用displayRO函数voiddisplayR(XS&r)r.dispXMO;r.dispXBO;r.dispNLO;〃主函数voidmain()CZSczs("赵一”,1,12);GZSgzs("钱二",0,15);DXSdxs("孙三”,1,18);XS*p;〃定义抽象基类的指针变量pp=&CZS;〃将学校生对象CZS的地址赋给Pdisplay?(p);p=&gzs;〃将高中生对象czs的地址赋给pdisplayP(p);p二&dxs;〃将高校生对象czs的地址赋给pdisplayP(p);cout«/z\n \n”XS&rl=czs;〃定义抽象基类的引用变量rl为czs的别名displayR(rl);XS&r2=gzs;〃定义抽象基类的引用变量r2为czs的别名displayR(r2);XS&r3二dxs;〃定义抽象基类的引用变量r3为czs的别名displayR(r3);cout«*\n \n”南昌航空高校试验报告二0年月日课程名称:面对对象程序设计B 试验名称:运算符重载班级:XXXXXXX 同学姓名: XXXXXX学号:指导老师评定: XX签名:XXXXX1、试验目的学习把握重定义与类有关的运算符。把握重载运算符的时机。学习把握把一个类对象转换为另一个类对象。学习把握重载为成员与友元的区分及其带参数的状况。学习把握值返回与引用返回的区分及应用时机。2、试验内容生成一个表示复数的类FS。复数的实部sb和虚部xb作为其数据成员。供应成员函数disp()显示复数(格式:-3+5i或6-2i),重载“+”、为FS类的成员函数,用来计算两个复数的和、差。思路导航:定义类,设计构造函数和显示函数print。;重载运算符“+”、"-”为类FS的成员函数。实例化FS类的2个对象,并采用重载的运算符对其进行计算。此外,依据上述定义,试将上述的运算符重载成员函数改写成友元函数。#include<iostream.h>classFS(doublesb,xb;public:FS(doublea=0,doubleb=0);FS&operator+(FS&);FS&operator-(FS&);voidprint();FS::FS(doublea,doubleb){sb=a;xb=b;}FS&FS::operator+(FS&f)FSg=*this;sb+=f.sb;xb+=f.xb;returng;FS&FS::operator-(FS&f)FSg=*this;sb-=f.sb;g.xb-=f.xb;returng;voidFS::print()cout«*("<<sb;if(xb>=0)cout<<"+";cout<<xb<<*i)*;voidmain()〃主函数FSa(-8,3),b(7,-4);FScl;cl=a+b;a.print();cout<<'+";b.print();cout<<"=";cl.print()cout«endl;FSc2;c2=a-b;a.print();cout<<“一";b・print();cout<<“=";c2.print()cout«endl;//运算符重载为友元函数#include<iostream.h>classFS{doublesb,xb;public:FS(doublea=0,doubleb=0);friendFSoperator+(FS&,FS&);friendFSoperator-(FS&,FS&);voidprint();FS::FS(doublea,doubleb){sb=a;xb=b;}FSoperator+(FS&fl,FS&f2)FSg;g.sb=f1.sb+f2.sb;g.xb=f1.xb+f2.xb;returng;FSoperator-(FS&fl,FS&f2)FSg;g.sb=fl.sb-f2.sb;g.xb=f1.xb-f2.xb;returng;voidFS::print()cout«*("<<sb;if(xb>=0)cout«*+*;cout<<xb«*i)voidmain()〃主函数FSa(8,3),b(7,-14);FScl;cl=a+b;a.print();cout«"+";b.print();cout<<“=";cl.print()cout«endl;FSc2;c2=a-b;a.print();cout«*-*;b.print();cout«"=";c2.print()cout«endl;⑵编写一个时间类,实现时间的加、减、读和输出://class.hclassTimepublic:Time0(}voidSetTimeO;voidDisplay();Timeoperator+(Time&a);Timeoperator-(Time&a);private:inthour,minute,second;};//function,cpp#include<iostream.h>#include"class,h”voidTime::SetTime()cout<<”请输入小时:*«endl;cin»hour;}while(hour<0||hour>23);docout<<”请输入分钟:"<<endl;cin»minute;}whi1e(minute<0|Iminute>59);docout<<”请输入秒钟:*«endl;cin»second;}while(second<0||second>59);voidTime::Display()cout<<hour«*:*<<minute«*:*<<second«endlTimeTime::operator+(Time&a)Timec;c.second=second+a.second;if(c.second>59)c.second-=60;minute++;c.minute=minute+a.minute;if(c.minute>59)c.minute-=60;hour++;c.hour=hour+a.hour;if(c.hour>23)c.hour-=24;returnc;TimeTime::operator-(Time&a)Timec;c.second=second-a.second;if(c.second<0)c.second+=60;minute—;c.minute=minute-a.minute;if(c.minute<0)c.minute+=60;hour一;c.hour=hour-a.hour;if(c.hour<0)c.hour+=24;returnc;//overload,cpp#include<iostream.h>#include"class,h”voidmain()Timea,b,c;请输入A的时间:〃<<endlSetTime();cout<<”请输入B的时间:〃<<endlSetTime();cout«"A的时间为:Display();cout<<"B的时间为:”;Display();cout«*c=a+b=*;c=a+b;Display();cout<<endl<<*c=a-b=/z;c=a-b;Display();南昌航空高校试验报告年月日课程名称:面对对象程序设计B 试验名称:动态链接库的制作与调用班级:XXXXXXX 同学姓名: XXXXXX学号:指导老师评定: XX签名:XXXXX一用所学的内容编写一个动态链接库的文件1、试验目的了解和把握类和指向函数的指针的使用。了解和把握宏的使用,把握动态链接库文件创建的过程。2、试验要求娴熟把握动态链接库文件的创建3、试验步骤与内容题目:创建一个动态链接库,实现画一棵树。.启动VisualC++6.0或者C++Builder5.0.在WINDOWS98或WINDOWS2000环境下,找到VisualC++6.0或者C++Builder5.0图标,双击之。为了不使VisualC++6.0或者C++Builder5.0的默认搜寻路径与WINDOWS其他软件相冲突,清修改VisualC++6.0或者C++Builder5.0图标的属性。在属性|程序|批处理一栏中填上你自己的批处理程序名。以便启动时,首先运行你的批处理程序。然后在该批处理程序中,写上path=...路径。.设置用户程序子名目设置用户程序子名目的目的是,将全部编程时产生的中间文件和最终执行程序文件全部放在自己的名目中,以便管理。.创建和输入程序VisualC++6.0启动后,要先建立一个project工程文件。方法为:选择Filelnew菜单项,将弹出New对话框。,单击Projects选项卡在Location中填用户子名目路径,在Projectname中填入工程名(如MyDll)在列表中选择MFCAppWizard(dll),表示你编制的应用程序将生成动态链接库文件(dl)依据提示创建一个自己想要的工程令定位到mydll.h文件处,添加动态链接库的函数原型声明,下面为mydll.h的内容:intDrawTree(CPaintDC*dc,intxStart9intyStart,doublelength,doubleangle,intnum);classCMyDllApp:publicCWinApp令定位到mydll.cpp文件处,添加动态链接库中的函数的实现部分,下面为mydll.cpp的内容://TheoneandonlyCMyDllAppobjectCMyDllApptheApp;intDrawTree(CPaintDC*dc,intxStartJntyStart,doublelength,doubleangle,intnum)intxEnd,yEnd;if(num==0)return1;xEnd=xStart+(int)(length*cos(angle));yEnd=yStart+(int)(length*sin(angle));dc->MoveTo(xStart,yStart);dc->LineTo(xEnd,yEnd);DrawTree(dc,xEnd,yEnd,length*0.6,angle+0.624,num-1);DrawTree(dc,xEnd,yEnd,length*0.85,angle+0.08,num-l);DrawTree(dc,xEnd,yEnd,length5}:0.65,angle-0.6,nuiii-l);return1;◊在mydll.def中引出DrawTree函数,下面为mydll.def的内容。;MyDll.def:DeclaresthemoduleparametersfortheDLL.LIBRARY"MyDll"DESCRIPTION'MyDllWindowsDynamicLinkLibrary'EXPORTSDrawTree•编译程序[思索问题I令程序中大小写用错了,结果会怎样?令假如返回类型void没有,结果会怎样,是否需要return语句?令编译中若有警告信息,影响程序运行吗?令如何编写动态链接库文件以及步骤?二动态链接库文件的调用1、试验目的(1)解和把握类和指向函数的指针的使用。了解和把握宏的使用。把握如何显示调用动态链接库文件。把握如何隐示调用动态链接库文件。调用动态链接库文件的步骤。2、试验要求娴熟把握在自己的应用程序中调用动态连接库文件的方法3、试验步骤与内容启动VisualC++6.0或者C++Builder5.0.在WINDOWS98或WINDOWS2000环境下,找到VisualC++6.0或者C++Builder5.0图标,双击之。为了不使VisualC++6.0或者C++Builder5.0的默认搜寻路径与WINDOWS其他软件相冲突,清修改VisualC++6.0或者C++Builder5.0图标的属性。在属性|程序|批处理一栏中填上你自己的批处理程序名。以便启动时,首先运行你的批处理程序。然后在该批处理程序中,写上path=...路径。2)设置用户程序子名目设置用户程序子名目的目的是,将全部编程时产生的中间文件和最终执行程序文件全部放在自己的名目中,以便管理。3)创建和输入程序VisualC++6.0启动后,要先建立一个project工程文件。方法为:选择File|new菜单项,将弹出New对话框。,单击Projects选项卡,在Location中填用户子名目路径,在Projectname中填入工程名在列表中选择MFCAppWizard(exe),表示你编制的应用程序将生成可执行文件(.exe)依据提示创建一个自己想要的工程4)调用步骤令隐示链接包含导出函数(或C++类)声明的头文件(.h)导入库(.lib)文件实际的DLL(.dll)文件令显示链接显示链接时,使用DLL的可执行程序在运行时通过函数调用来显示加载或卸载DLL,并通过函数指针来调用DLL的导出函数,要显示链接DLL,应用程序必需调用LoadLibrary来加载DLL,并猎取模块句柄,调用GetProcAddress来猎取应用程序要调用的导出函数的指针,使用完DLL后,应调用FreeLibrary来卸载DLL.5)主要程序代码定位到视图类CtestDllView的实现TestDllView.cpp中的函数OnPaint处,加入下列的代码:voidCTestDllView::OnPaint()CPaintDCdc(this);11devicecontextforpainting//typedefint(*DRAWTREE)(CPaintDC*,int,int,double,double,//int);typedefint(*DRAWTREE)(CPaintDC*,int,int,double,double,int);DRAWTREEDrawTree;CRectrect;GetClientRect(rect);FARPROClpfn=NULL;HINSTANCEhinst=NULL;hinst=LoadLibrary(,'MyDll.dir,);if(hinst==NULL)AfxMessageBox(n不能加载动态链接库)return;lpfn=GetProcAddress(hinst,uDrawTreen);DrawTree=(DRAWTREE)Ipfn;dc.SetMapMode(MM_LOENGLISH);if(lpfn==NULL)AfxMessageBox(”不能加载画树函数)elseDrawTree(&dc,rect.right/2,-rect.bottom*9/10,(double)rect.bottom*0.2,1.57,9);FreeLibrary(hinst);//TODO:Addyourmessagehandlercodehere//DonotcallCView::OnPaint()fbrpaintingmessages6)运行界面

[思索问题I.在调用动态链接库文件时应留意哪些问题?.如何显示或隐示调用动态链接库文件。.实际的动态链接库文件可以存放在哪些位置。南昌航空高校试验报告二年11月20日课程名称:面对对象程序设计B试验名称:动态链接库的制作与调用班级:同学姓名: XXX学号:指导老师评定2 签名:一用所学的内容编写一个动态链接库的文件1、试验目的4) 了解和把握类和指向函数的指针的使用。5) 了解和把握宏的使用,6) 把握动态链接库文件创建的过程。2、试验要求娴熟把握动态链接库文件的创建3、试验步骤与内容题目:创建一个动态链接库,实现计算器功能。1),启动VisualC++6.02)新建一个具有计算功能的动态链接库。.创建和输入程序VisualC++6.0启动后,要先建立一个project工程文件。方法为:选择File|new菜单项,将弹出New对话框。,单击Projects选项卡在Location中填用户子名目路径,在Projectname中填入工程名(如MyDll)在列表中选择Win32Dynamic-LinkLibrary,表示你编制的应用程序将生成动态链接库文件(.dll)新建一个JiSuan.hextern,,C,,_declspec(dllexport)intadd(inti,intj);extern"C"_declspec(dl】export)inlsub(inti,intj);extern"C"_declspec(dHexport)intmull(inti,intj);externuCn_declspec(dllexport)noatdivv(inti,intj);extern 表示依据C语言的函数生成方式编译,由于C++中实现了函数的重载,所以在同名函数的处理上实行名称粉碎功能(即在函数名中加上一些特别字符来区分不同函数)。_declspec(d】lexport)表示该函数是可导出函数,可以用VC6.0中的Depends工具查看.dll中的导出函数。,新建一个JiSuan.cpp#include"JiSuan.h"intadd(inti,intj)returni+j;intsub(inti,intj)returni-j;intmull(inti,intj)returni*j;floatdivv(inti,intj)returni/(float)j;编译程序生成JiSuandl和JiSuan.lib以便其他程序调用。二动态链接库文件的调用1、试验目的解和把握类和指向函数的指针的使用。了解和把握宏的使用。把握如何显示调用动态链接库文件。把握如何隐示调用动态链接库文件。(10)调用动态链接库文件的步骤。2、试验要求娴熟把握在自己的应用程序中调用动态连接库文件的方法3、试验步骤与内容1)启动VisualC++6.02)创建和输入程序VisualC++6.0启动后,要先建立一个project工程文件。方法为,选择File|new菜单项,将弹出New对话框。单击Projects选项卡,在Location中填用户子名目路径在Projectname中填入工程名在列表中选择MFCAppWizard(exe),表示你编制的应用程序将生成可执行文件(.exe)依据提示创建一个自己想要的工程3)调用步骤本试验实行隐式调用动态链接库的方法。建立一个名为:JieMian的MFC程序。打开“工程”今“设置”今“link”今“对象/库”加入“JiSuan.lib”表示该工程调用“JiSuan.dll”动态链接库。设计界面如上图。将两个文本输入框和两个整形变量关联.同时在四个按钮下添加大事:voidCJieMianDlg::OnButton1()//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CStringstr;inthe=add(m_a,m_b);str.Format("%d和%(1的和为:%d!”,m_a,m_b,he);AfxMessageBox(str);)voidCJieMianDlg::OnButton2()//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CStringstr;intcha=sub(m_a,m_b);str.Format(n%d和%(1的差为:%d!”,m_a,m_b,cha);AfxMessageBox(str);//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CStringstr;intji=mull(m_a,m_b);str.Format(n%d和%(1的积为:%d!”,m_a,m_b,ji);AfxMessageBox(str);//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CStringstr;floatshang=divv(m_a,m_b);str.Format("%d和%(1的积为shang);AfxMessageBox(str);A译链接执行:在编辑框中输入两个整型值,分别按四个按钮,即可得到两个数的和,差,积,商.运行效果:南昌航空高校试验报告二年11月13日课程名称:面对对象程序设计B 试验名称:动态链接库的制作与调用班级:同学姓名:XXXXX学号:指导老师评定j签名:一、试验目的了解和把握类和指向函数的指针的使用。了解和把握宏的使用,把握动态链接库文件创建的过程。把握如何显示调用动态链接库文件。把握如何隐示调用动态链接库文件。调用动态链接库文件的步骤。二、试验要求.娴熟把握动态链接库文件的创建.娴熟把握在自己的应用程序中调用动态连接库文件的方法三、试验步骤与内容题目:创建一个动态链接库,实现画一个房子.1、用所学的内容编写一个动态链接库的文件⑴.启动VisualC++6.0或者C++Builder5.0在WINDOWS98或WINDOWS2000环境下,找到VisualC++6.0或者C++Builder5.0图标,双击之。为了不使VisualC++6.0或者C++Builder5.0的默认搜寻路径与WINDOWS其他软件相冲突,清修改VisualC++6.0或者C++Builder5.0图标的属性。在属性|程序|批处理一栏中填上你自己的批处理程序名。以便启动时,首先运行你的批处理程序。然后在该批处理程序中,写上path=...路径。⑵.设置用户程序子名目设置用户程序子名目的目的是,将全部编程时产生的中间文件和最终执行程序文件全部放在自己的名目中,以便管理。⑶.创建和输入程序VisualC++6.0启动后,要先建立一个project工程文件。方法为:,选择File|new菜单项,将弹出New对话框。单击Projects选项卡,在Location中填用户子名目路径,在Projectname中填入工程名(如a)在列表中选择MFCAppWizard(dll),表示你编制的应用程序将生成动态链接库文件(dl)依据提示创建一个自己想要的工程(4).定位到a.h文件处,添加动态链接库的函数原型声明,下面为a.h的内容://a.h:mainheaderfilefortheADLLvoidDrawhouse(CPaintDC*dc,intxStart,intyStart);classCAApp:publicCWinApp:…⑸.定位到a.cpp文件处,添加动态链接库中的函数的实现部分,下面为a.cpp的内容//a.cpp:DefinestheinitializationroutinesfortheDLL.CAApptheApp;voidDrawhouse(CPaintDC*dc,intxStart,intyStart){inti,a,b,c,d;doublem,n,p,q;a=xStart+75;b=yStart+80;c=xStart+125;d=yStart+80;m=xStart;n=yStart+230;p=xStart+200;q=yStart+230;dc->MoveTo(xStart,yStart+80);dc->LineTo(xStart+200,yStart+80);dc->LineTo(xStart+200,yStart4-230);dc->LineTo(xStart,yStart+230);dc->LineTo(xStart,yStart+80);dc->MoveTo(xStart,yStart+230);dc->LineTo(xStart+55,yStart+330);dc->LineTo(xStart+255,yStart+330);d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论