讲稿实验指导_第1页
讲稿实验指导_第2页
讲稿实验指导_第3页
讲稿实验指导_第4页
讲稿实验指导_第5页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

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

文档简介

1、实验指导 实验1 C+语言基础实验2 类和对象实验3 使用类和对象实验4 重载实验5 继承与类的派生实验6 多态与虚函数实验7 输入输出流实验8 异常处理与命名空间附:实验报告注意事项实验1 C+语言基础1.实验目的 (1)学习C+文件的建立和编译。 (2)掌握C+基本语句,语言规范。 (3)熟悉变量及函数。 2.实验基本要求 (1)理解C+基本程序,预编译语句,掌握编译方法。 (2)掌握C+基本的输入输出语句。 (3)熟悉函数的定义和使用,理解带参数的主函数。实验1 C+语言基础3.实验例题 例1 最简单的C+程序 / 输出一行字符。 #include void main() cout “T

2、his is the simplest C+ program.n”; 实验1 C+语言基础 例2 cin与cout的使用 #include void main() cout please enter your name and age: name; cin age; cout name is : name endl; cout age is : age endl; 实验1 C+语言基础 例3 应用问题:程序对用户输入半径,计算并显示园的面积。 一个应用程序源码 /* 演示C+程序的基本结构程序 功能:对用户输入半径,程序计算园的面积 */ #include using namespace st

3、d; void main() double r, area; cout r; area = 3.14159 * r * r; cout圆的面积为:areaendl; 实验1 C+语言基础 程序的模块化例3-1 应用程序结构的改进 /对用户输入半径,计算园的面积程序改进版v1.0 -单模块 #include void calCircleArea() double r, area; cout r; area = 3.14159 * r * r; cout 圆的面积为: area endl; ; void main() calCircleArea(); 实验1 C+语言基础 例3-2 应用程序结构的

4、改进 /对用户输入半径,计算园的面积程序改进版v1.1 -多模块 #include double set_radius() double radius; cout radius; return radius; double calculate_area(double r) return 3.14159 * r * r; ;实验1 C+语言基础 void print_area(double area) cout 圆的面积为: area endl; void main() double r,a; r=set_radius(); a=calculate_area(r); print_area(a);

5、 实验1 C+语言基础 例4 预处理语句 #include和#define的使用 1)新建att.h文件,在其中放入以下有关函数定义:#include #define PI 3.14159 /使用#definedouble calCircleArea(double r)double area; area = PI * r * r;return area; double set_radius() double radius; cout radius; return radius; void print_area(double area) cout 圆的面积为: area endl; 实验1 C+

6、语言基础 2)在同一目录中,新建一个c1.cpp,代码为: #include att.h /使用#include void main() double r,a; r=set_radius(); a=calculate_area(r); print_area(a); 3)编译测试实验1 C+语言基础 例5 不带参数的主函数应用程序 #include void func1() cout Input datan; void func2() cout output datan; void main() int sel; do cout sel; switch (sel) case 1: func1()

7、; break; case 2: func2(); break; default: break; while (sel=1|sel=2); 实验1 C+语言基础 例6 带参数的主函数应用程序 / 处理命令行参数实例 #include void main(int argc, char *argv) cout这个程序的程序名是:argv0n; if (argc=1) cout没有参数!; else int nCount = 1; while(nCount argc) cout第nCount个参数是: argvnCountn; nCount+; 实验1 C+语言基础应用编程任务 任务1 程序对用户输

8、入正立方边长,计算并显示其体积。 任务2 程序对用户输入园半径或正方形边长,计算并显示其面积。实验2 面向对象方法Part1 类的定义与对象的使用 1.实验目的 (1)学习类与对象的定义。 (2)掌握类与对象的使用方法。 (3)学习数据成员与成员函数的访问方式。 2.实验要求 (1)可以定义出一个类 (2)创建该类的对象 (3)对象的访问 3.实验例题实验2 面向对象方法 例1 类和对象 /功能:输入一个数,并输出该数。 #include #include class Sample public: void numin() cout x; void disp() cout endl 这个数是:

9、 x endl; private: int x; ; void main() Sample s; s.numin(); s.disp(); 实验2 面向对象方法例2 建立一个新的计算立方体周长与体积的类。(将新建的类命名为 Box) #include class Box public: void seta(float r) a = r; void getvolume() volume = a * a * a; /计算体积 void getarea() area = 6*a*a; /计算表面积 void disp()/显示计算结果 cout 体积: volume ,表面积: area endl;

10、 private: float a,volume,area; ; 实验2 面向对象方法 void main() Box obj;/定义对象 obj.seta(6);/对象的访问 obj.getvolume(); obj.getarea(); obj.disp(); 4.实验任务 以面向对象的编程方法,计算球面积与体积(建立一个求球面积与体积的Ball类)。实验2 面向对象方法Part2 构造函数与析构函数 1实验目的 (1)学习类与对象的定义和使用; (2)理解构造函数与析构函数的定义与执行过程; 2实验要求 (1)定义一个类,并且创建该类的对象。 (2)体现出构造函数与析构函数的调用。 (3

11、)理解构造函数与析构函数的运行顺序。 3实验例题实验2 面向对象方法 例1 析构函数的调用 /功能:输出cat信息,age 和 weight。 #include class simplecat public: simplecat(int age,int weight);/构造函数 simplecat(); int GetAge() return itsage; int GetWeight() return itsweight; private: int itsage,itsweight;/定义两个变量 ;实验2 面向对象方法 simplecat:simplecat(int age,int we

12、ight)/构造函数,对变量进行初始化 cout 调用构造函数 endl; itsage = age; itsweight = weight; simplecat:simplecat() cout 调用析构函数 endl; int main() simplecat F(5,8); cout F age is: F.GetAge() endl; cout F weight is: F.GetWeight() endl; return 0; 实验2 面向对象方法 例2 观察构造函数与析造函数的调用顺序。(在此文件中建立一个 Tpair 的类。) #include class Student pub

13、lic: Student() coutconstructing student.n; Student() coutdestucting student.n; ;实验2 面向对象方法 class Teacher public: Teacher() coutconstructing teacher.n; Teacher() coutdestucting teacher.n; ;实验2 面向对象方法 class Tpair public: Tpair() coutconstructing tutorpair.n; Tpair() coutdestucting tutorpair.n; protect

14、ed: Student student; Teacher teacher; ; void main() Tpair tp; coutback in main.n; 实验2 面向对象方法例3.程序对用户输入正立方边长,计算并显示其体积(用面向对象的编程方法)。 / 使用构造函数 #include class CCubic private: double len; public: CCubic(); double calculate_Volue(); void print_Volue(); ; /需加; CCubic:CCubic() cout len; 实验2 面向对象方法 double CCu

15、bic:calculate_Volue() return len * len * len; ; void CCubic:print_Volue() cout 正方体积: calculate_Volue() endl; 实验2 面向对象方法 void main() int sel; sel=1; do cout sel; switch (sel) case 1: CCubic c; c.print_Volue(); break; default: break; while (sel=1); 实验2 面向对象方法例4.利用类和构造函数的方法,编写程序,解一元一次方程。(如CLinaerEquati

16、on类) #include char sgn(double x) if (x=0) return(+); else return(-); double abs(double x) if (x=0) return(x); else return(-x); 实验2 面向对象方法 class CLinearEquation private: double a,b; public: CLinearEquation(double a1, double b1); void disp_Equation(); void disp_Root(); ; CLinearEquation:CLinearEquatio

17、n(double a1, double b1) a=a1; b=b1; 实验2 面向对象方法 void CLinearEquation:disp_Equation() cout 线性方程: a X sgn(b ) abs(b ) =0 endl; void CLinearEquation:disp_Root() cout 线性方程的根: Root= -b/a endl; ; void main() CLinearEquation e1(2,-4); e1.disp_Equation(); e1.disp_Root(); 4实验内容 利用类和构造函数的方法,编写程序,解一元二次方程。(如Comp

18、lex类和CQuadraticEquation类)实验3 继承与类的派生 1实验目的 (1)学习派生类的定义和使用; (2)理解派生类对基类成员的访问权 (3)理解派生类的构造函数与析构函数的定义与执行过程; (4)学习多继承类的定义和使用 2实验要求 (1)定义一个派生类,并且创建该类的对象。 (2)体现出派生类构造函数与析构函数的调用。 (3)理解派生类的构造函数与析构函数的运行顺序。 (4)定义一个多继承的派生类,并且创建该类的对象。 3实验例题实验3 继承与类的派生例1 有一个base基类,派生出两个类,一个是私有派生,一个是公有派生。#include class base /定义一个

19、基类int x1,x2;public:void assign(int p1,int p2) /为私有数据赋值x1=p1;x2=p2;int inc1()return +x1;int inc2()return +x2;void dispaly() /输出x1,x2的值coutbase x1=x1 x2=x2n;实验3 继承与类的派生class derive1:base /定义一个私有派生类int x3;public:derive1(int p3)x3=p3; /构造函数void assign(int p1,int p2) /为基类数据赋值base:assign(p1,p2); /调用基类成员函数

20、int inc1()return base:inc1(); /调用基类成员函数为x1增值int inc2()return base:inc2();int inc3()return +x3; /求x3的值 void display()coutderive1 x3=x3n; /输出x3的值;实验3 继承与类的派生 class derive2:public base /定义一个公有派生类int x4;public:derive2(int p4)x4=p4; /构造函数int inc1()int temp=base:inc1(); /不断调用基类的inc1()temp=base:inc1();temp

21、=base:inc1();return base:inc1();int inc4()return +x4; /对x4增值void display()base:dispaly() ; /首先调用基类的display()coutderive2 x4=x4n;实验3 继承与类的派生 main()base p; p.assign(-2,-2); /p1的x1,x2取-2 p.dispaly(); /显示成员函数 derive1 d1(-4); d1.assign(10,10); d1.inc1(); d1.display(); derive2 d2(5); d2.assign(-6,-6); d2.d

22、isplay(); d2.inc1(); d2.inc2(); /实质执行的是d2.base:inc2() d2.display(); d2.base:inc1(); /显式调用基类的成员函数 d2.display(); return 1;实验3 继承与类的派生例2 教师和学生之间有很多相同的信息,如姓名、年龄等,可抽象出基类person;学生类student和教师类teacher作为person 的派生类。 #include class person /定义基类char *name; /姓名int age; /年龄char *add; /住址public:person() /构造函数cout

23、the constructor of class person!n;person() /析构函数coutthe destructor of class person!n;实验3 继承与类的派生class student:public person /定义派生类studentchar *department; /所在系int level; /年级public:student() /构造函数coutthe constructor of class student!n;student() /析构函数coutthe destructor of class student!n;实验3 继承与类的派生cl

24、ass teacher:public person /定义派生类teacherchar *major; /专业float salary; /工资public:teacher() /构造函数coutthe constructor of class teacher!n;teacher() /析构函数coutthe destructor of class teacher! n;实验3 继承与类的派生main() student d1;teacher d2;return 1;实验3 继承与类的派生例3 图形的基本单元是一个点,location描述屏幕位置的点,他派生出的类point具有显示、隐去和移动

25、功能。由point类派生出的圆类circles,point类的数据成员作为圆心。 #includeclass location /定义位置类protected:int x,y; /x,y为保护段成员public:location(int x,int y); /基类构造函数;实验3 继承与类的派生class point:public location /定义point类为location类的公有派生public:point(int x,int y); void show(); /用当前颜色画点void hide(); /抹去显示的点void moveto(int nx,int ny); /移动点

26、;实验3 继承与类的派生class circles:point /定义circles类为point类的私有派生int radius;public:circles(int x,int y,int radius);void show(); /显示圆void hide(); /抹去圆void moveto(int nx,ny); /在屏幕上移动圆;location:location(int x,int y)location:x=x;location:y=y;实验3 继承与类的派生point:point(int x,int y):location(x,y) /point类构造函数,是专门为了执行loc

27、ation 类的构造函数而设置的void point:show()putpixel(x,y,getcolor(); /用当前颜色画点void point:hide()putpixel(x,y,getbkcolor(); /用当前背景色画点,相当于在屏幕上删除点 实验3 继承与类的派生void point:moveto(int nx,int ny) /在屏幕上移动点hide();x=nx;y=ny;show();circles:circles(int x,int y,int radius):point(x,y)/circles类的构造函数,缀上了基类的构造函数circles:radius=rad

28、ius;实验3 继承与类的派生void circles:show()circle(x,y,radius); /画一个圆void circle:hide()unsigned int sc;sc=getcolor(); /取出当前色setcolor(getbkcolor(); /将背景色作为当前色circle(x,y,radius); /用背景色画一个圆,相当于抹去一个圆setcolor(sc); /将当前色置回到原来状态实验3 继承与类的派生void circles:moveto(int nx,int ny) /在屏幕上移动圆hide();x=nx;y=ny;show();实验3 继承与类的派生

29、main()circles cir(320,240,100);int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,); /初始化图形模式setcolor(14);cir.show();for (int i=100;i300;i+) /用循环在屏幕上不断移动这个圆,/得到一个动的圆cir.moveto(2*i,i);closegraph();return 1;实验3 继承与类的派生例4 在一个圆内显示正文。要解决这个问题,实际上是完成显示一个带字符串的圆。它可以是从圆类和正文类多继承来的新类,而圆类和正文类又都是从point类派生出来的类。实验3

30、 继承与类的派生#include #include#includeclass point protected:int x,y; /x,y为point类的保护段成员public: point(int initx,int inity);class circles:point/定义圆类int radius;public:circles(int x,int y,int radius);void show();实验3 继承与类的派生class gmessage:point /定义正文类 char *msg; int font; int field;public:gmessage(int mx,int m

31、y,int msgfont,int fieldsize,char *text);void show();class mcircle:circle,gmessage /定义带字符串的圆类public:mcircle(int mrx,int mry,int mrradius,int font,char *msg);void show();实验3 继承与类的派生point:point(int initx,int inity)x=initx;y=inity;circles:circles(int x,int y,int radius):point(x,y)circles:radius=radius;v

32、oid circles:show()circle(x,y,radius);实验3 继承与类的派生gmessage:gmessage(int mx,int my,int msgfont,int fieldsize,char *text):point (mx,my)font=msgfont;field=fieldsize;msg=text;void gmessage:show()int size=field/(8*strlen(msg);settextjustify(CENTER_TEXT,CENTER_TEXT); /指定文本输出的对齐方式settextstyle(font,HORIZ_DIR,

33、size); /设置文本输出属性outtextxy(x,y,msg); /输出字符串实验3 继承与类的派生mcircle:mcircle(int mrx,int mry,int mrradius,int font,char *msg):circles(mrx,mry,mrradius),gmessage(mrx,mry,font,2*mrradius,msg) vod mcircle:show()circles:show();gmessage:show();实验3 继承与类的派生main()int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,)

34、;setcolor(12);mcircle la(250,250,225,GOTHIC_FONT,universe);la.show();getch();closegraph();return 1;实验3 继承与类的派生 4实验内容(1)设计一个大学的类系统,学校中有学生、教师、职员,每种人员都有自己的特性,它们之间又有相同的地方。利用继承机制定义这个系统中的各个类及类上必须的操作。(2)定义水果类和树类,并描述它们的一些特性,由这两个类派生出苹果类和桔子类,定义它们的一些基本功能。实验4 重载1.实验目的 (1)学习C+函数的重载。 (2)学习C+运算符重载。2.实验基本要求 (1)掌握C+

35、函数重载的使用。 (2)掌握C+运算符重载的使用。3.实验例题实验4 重载例1.使用一般函数重载实现两个int、float、double和字符串相加#include#includeint plus(int x,int y) /return x+y;float plus(float x,float y)return x+y;double plus(double x,double y)return x+y;实验4 重载char *plus(char *x,char *y)return strcat(x,y);void main()int i=12,j=34;float x1=1.2,y1=4.5;

36、double x2=24.5,y2=635.4;char str120 =object, *str2=windows;coutplus(i,j)n;coutplus(x1,y1)n;coutplus(x2,y2)n;coutplus(str1,str2)n;实验4 重载例2:定义一个计时器类,构造函数传递的参数可以用一个整数表示的秒数,也可用数字串表示;还可传递两个参数,一个表示秒数,一个表示分钟数。#include #includeclass timerint seconds;public:timer();timer(char *t);timer(int t);timer(int,int);

37、int gettimer();实验4 重载timer:timer()seconds=0;timer:timer(int t)seconds=t;timer:timer(char *t)seconds=atoi(t);timer:timer(int min,int sec)seconds=min*60+sec;int timer:gettimer()return seconds;实验4 重载main()timer t1,t2(123),t3(23),t4(2,34);coutobject t1:t1.gettimer()n;coutobject t2:t2.gettimer()n;coutobj

38、ect t3:t3.gettimer()n;coutobject t4:t4.gettimer()n;return 1;实验4 重载例3. point类中有两个数据成员x,y, 使用重载运算符“+”,“-”的方法进行Point对象的相加或相减,实际上是两个点坐标的x,y值各自相加或相减。实验4 重载#include class pointint x,y;public:point(int vx,int vy)x=vx;y=vy;point() x=0;y=0;point operator + (point p1); /重载运算符+point operator - (point p1); /重载运

39、算符-void print()coutx yn;实验4 重载point point:operator + (point p1) /定义两个对象的+函数point p;p.x=x+p1.x;p.y=y+p1.y;return p; /返回当前对象与p对象之和point point:operator - (point p1) /定义两个对象的+函数point p;p.x=x-p1.x;p.y=y-p1.y;return p; /返回当前对象与p对象之差实验4 重载main()point p1(10,10),p2(20,20);p1=p1+p2;p1.print();return 1;实验4 重载例

40、4.用友元重载运算符进行复数运算#include class complex float real,imag;public:complex(float r,float i)real=r;imag=i;complex()real=0;imag=0;实验4 重载 void print(); friend complex operator + (complex plex b); friend complex operator - (complex plex b); friend complex operator * (complex plex b); friend complex operator

41、/ (complex plex b); ;实验4 重载 void complex:print() cout0) cout+; if(imag!=0)coutimagin; complex operator + (complex plex b) /重载+定义 complex temp; temp.real=a.real+b.real; temp.imag=a.imag+b.imag; return temp; 实验4 重载 complex operator - (complex plex b) /重载-定义 complex temp; temp.real=a.real-b.real; temp.

42、imag=a.imag-b.imag; return temp; complex operator * (complex plex b) /重载*定义 complex temp; temp.real=a.real*b.real-a.imag*b.imag; temp.imag=a.real*b.imag+a.imag*b.real; return temp; 实验4 重载 complex operator / (complex plex b) /重载/定义 complex temp; float tt; tt=1/(b.real*b.real+b.imag*b.imag); temp.real

43、=(a.real*b.real+a.imag*b.imag)*tt; temp.imag=(b.real*a.imag-a.real*b.imag)*tt; return temp; 实验4 重载main()complex c1(2.3,4.6),c2(3.6,2.8),c3;c1.print();c2.print();c3=c1+c2;c3.print();c3=c2-c1;c3.print();c3=c1*c2;c3.print();c3=c1/c2;c3.print();return 1;实验4 重载例5.有一个计数器类,要对它定义两个重载运算符+,-.#include class co

44、unterunsigned int value;public:counter()value=0;void operator +();void operator -();int get()return value;实验4 重载void counter:operator +()if(value0) value-;实验4 重载main()counter c1;for (int i=0;i10;i+)c1+;coutc1.get()n;c1-;c1-;coutc1.get()n;return 1;实验4 重载例6.假如有一个实数矩阵,需要对它进行加法、减法和乘法运算,并且重载运算符 (),用来返回矩阵

45、元素的值。 #include class matrixshort rows,cols;double *elems;public:matrix(short rows,short cols);matrix(); double operator ()(short row,short col); /重载运算符“()”,用来返回元素值void setelem(short row,short col,double val); /为矩阵元素赋值friend matrix operator + ( matrix p,matrix q); /实现矩阵相加 friend matrix operator - ( m

46、atrix p,matrix q); /实现矩阵相减 void print(); /输出矩阵中各元素;实验4 重载matrix:matrix(short rows,short cols)matrix:rows=rows;matrix:cols=cols;elems=new doublerows*cols; /为矩阵动态分配内存inline matrix:matrix() delete elems; /释放矩阵所占内存实验4 重载double matrix:operator () (short row,short col)return (row=1 &row=1 &col=1 &row=1 &c

47、ol=cols)elems(row-1)*cols+(col-1)=val;实验4 重载matrix operator + (matrix p,matrix q)matrix m(p.rows,p.cols);if(p.rows!=q.rows|p.cols!=q.cols)return m;for (int r=1;r=p.rows;r+)for (int c=1;c=p.cols;c+)m.setelem(r,c,p(r,c)+q(r,c);return m;实验4 重载matrix operator - (matrix p,matrix q)matrix m(p.rows,p.cols)

48、;if(p.rows!=q.rows|p.cols!=q.cols)return m;for (int r=1;r=p.rows;r+)for (int c=1;c=p.cols;c+)m.setelem(r,c,p(r,c)-q(r,c);return m;实验4 重载void matrix:print()for (int r=1;rrows;+r)for (int c=1;ccols;c+)cout(*this)(r,c) ;coutn;实验4 重载main()matrix a(2,3),b(2,3),d(2,3);a.setelem(1,1,1.0);a.setelem(1,2,3.0)

49、;a.setelem(1,3,3.0);a.setelem(2,1,4.0);a.setelem(2,2,5.0);a.setelem(2,3,6.0); b.setelem(1,1,1.0); b.setelem(1,2,2.0); b.setelem(1,3,3.0); b.setelem(2,1,4.0); b.setelem(2,2,5.0); b.setelem(2,3,6.0); 实验4 重载 a.print;b.print;d=a+b;d.print();d=a-b;d.print();实验4 重载4.应用编程任务(1)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符”

50、+”,使之能用于矩阵相加。如c=a+b。(2)定义一个复数类Complex,重载运算符”+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类对象,也可以其中一个是整数,顺序任意。如c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编程序,分别求两个复数之和,整数和复数之和。实验5 多态与虚函数1.实验目的 (1)理解C+多态、虚函数、抽象类。 (2)学习使用虚函数和多态编程。 (3)学习抽象类编程。2.实验基本要求 (1)掌握虚函数和多态的使用。 (2)掌握抽象类的使用。3.实验例题实验5 多态与虚函数例1:虚函数的定义及使用#includeclass basep

51、ublic:virtual void who()coutbasen;class first:public basepublic:void who()coutthe first derivationn;实验5 多态与虚函数class second:public basepublic:void who()coutwho(); /调用base类的who()ptr=&obj2;ptr-who(); /调用first类的who()ptr=&obj3;ptr-who(); /调用second类的who()return 1;实验5 多态与虚函数例2.多态例示 #include class base publ

52、ic: virtual void fn() cout In base classn; ; class subclass:public base public: virtual void fn() cout In subclassn; ;实验5 多态与虚函数 void test(base &b) b.fn(); void main() base bc; subclass sc; test(bc); test(sc); 实验5 多态与虚函数 例3.姓氏运动会 /多态例示 李氏两兄妹(哥哥和妹妹)参加姓氏运动会(不同姓氏组队参加),哥哥男子项目比赛,妹妹参加女子项目比赛, 开幕式有一个参赛队伍代表发

53、言仪式,兄妹俩都想去露露脸,可只能一人去,最终他们决定到时抓阄决定,而组委会也不反对, 它才不关心是哥哥还是妹妹来发言,只要派一个姓李的来说两句话就行。实验5 多态与虚函数 #include class Li public: virtual void say() ; class Li_brother : public Li public: virtual void say() cout Im Li ming, I have 3 sports: boxing, fencing and wrestling. endl; void boxing() cout boxing endl; void fe

54、ncing() cout fencing endl; void wrestling() cout wrestling endl; ;实验5 多态与虚函数 class Li_sister : public Li public: virtual void say() cout Im Li xia, I have 2 sports: swim and skating. endl; void swim() cout swim endl; void skating() cout skatingsay(); int main() Li *p; /基类指针,李家代表 Li_brother b; Li_sis

55、ter s; p = &s; /基类指针指向派生类Li_sister对象,获得发言机会 Speak(p); return 0; 实验5 多态与虚函数例4 现有三角形、正方形和圆形三种图形,求它们各自的面积。可以从它们抽象出一个基类,在基类中声明一个虚函数,用来求面积,并利用单界面、多实现版本设计各个图形求面积的方法。程序如下:#include class figure /定义一个公共的基类protected: int x,y;public: figure(int x,int y) figure:x=x; figure:y=y; virtual void show_area() /定义一个界面接

56、口 coutno area for this claaan;实验5 多态与虚函数class triangle:public figure /定义三角形类,基类成员x为底边长,y为三角形的高public: triangle(int x,int y):figure(x,y); void show_area() /三角形类的虚函数版本 coutthe area of this triangle is:x*y*0.5n;class square:public figure /定义正方形类,基类的数据成员为正方形的边长public: square(int x):figure(x,x); void sho

57、w_area() /正方形类的虚函数版本 coutthe area of this square is:x*xn;实验5 多态与虚函数 class circles:public figure /定义圆类,基类的数据成员为圆的半径public: circles(int x):figure(x,x); void show_area() coutthe area of this circle is:x*x*3.1416show_area(); ptr=&squa; /指针ptr指向正方形类对象ptr-show_area();ptr= /指针ptr指向圆类对象ptr-show_area();retur

58、n 1; 实验5 多态与虚函数 例5 .猫和狗 /多态例示,抽象类真正的好处。 家里养了一些类型的宠物,如猫和狗。可以养新的宠物,并能叫出家里所有宠物的名字。#include #include using namespace std;class Pet public: string name; Pet(string s): name(s) ; virtual void printname()=0 ; /printname()纯虚函数,在派生类中不同的实现 ;实验5 多态与虚函数class Dog : public Pet public: Dog(string s): Pet(s); void

59、printname() cout this is : name endl; ; class Cat : public Pet public: Cat(string s): Pet(s); void printname() cout this is : name endl; ;实验5 多态与虚函数class Home private: int nPets; Pet * pPets20; /基类指针,可指向各派生类对象,表现多态 public: void Add(Pet * pPet) pPetsnPets+ = pPet; void printAll() for(int i = 0; i pri

60、ntname(); /运行时多态性 Home():nPets(0) ;实验5 多态与虚函数 int main() Home myhome; myhome.Add(new Dog(dog1); myhome.Add(new Dog(dog2); myhome.Add(new Dog(dog3); myhome.Add(new Cat(cat1); myhome.Add(new Cat(cat2); myhome.Add(new Cat(cat3); myhome.printAll(); return 0; 实验5 多态与虚函数4. 任务:1.先建立一个Point类,包含数据成员x,y。以它为基类

温馨提示

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

评论

0/150

提交评论