课程名称:
实验项目:
实验地点:
专业班级:
学生姓名:指导教师:本科实验报告
C++面向对象程序设计 C++语言编程 明向校区 软件1431 学号: ******XXXX ***
***
2015年5月10 日
实验内容 实验记录 1.运行例题程序: #include 实验2.3(1)(2)(3) using namespace std; void fn1(int z=5); int x=1,y=2; int main() { } void fn1(int z) { static int x=100; int y=200; cout<<\"x=\"<2.编写重载函数max1可分别求取2个整数,3个整数,3个双精度数,3个双精度数的最大值 #include using namespace std; int max(int x,int y); double max(double x,double y); int max(int x,int y,int z); double max(double x,double y,double z); int main() { int a,b,c; cout<<\"请输入3个整数\"<>a>>b>>c; cout<<\"2个整数的最大值:\"<>i>>j>>k; cout<<\"2个双精度数的最大值:\"<y?x:y; } double max(double x,double y) { return x>y?x:y; } int max(int x,int y,int z) { return (max(x,y)>z)?max(x,y):z; } double max(double x,double y,double z) { return (max(x,y)>z)?max(x,y):z; }运行结果:3.用new操作为一个包含10个整数的数组分配内存,输入若干个值到数组中,分别统计其中正数和负数的个数后再用delete操作释放内存。 #include using namespace std; const int N=10; int main() { int *p,i,plus,minus; p=new int[N]; if(!p) { cout<<\"内存分配错误!\"<>p[i]; if(p[i]>0) plus++; else if(p[i]!=0) minus++; } cout<<\"正数的个数:\"<心得体会 在经过多次编写实验程序后,比较了C与C++,二者在编程的思想上完全不同,但是在C++的编译器中,也会用到很多C中的东西,虽然C++后期修改程序上比C要容易了很多,但是在编写过程中要比C要麻烦。虽然编写了这么多的程序,但是对编写的程序如何变成软件还是有很多的疑惑以及更大好奇心。 实验内容 实验记录 1.程序: 实验3.3(1)(2)(3)(4) #include #define pi 3.14 using namespace std; int main() { cout<<\"1计算圆面积\"<>x; while(x!=4) { if(x==1) { } else if(x==2) { } else if(x==3) double m,n; cout<<\"请输入矩形的长和宽:\"; cin>>m>>n; area=m*n; cout<<\"矩形的面积:\"<>r; area=3.14*r*r; cout<<\"圆的面积:\"<} { } else { } cout<<\"输入有误,请重新输入!\"<>x; double m; cout<<\"请输入正方形的边长:\"; cin>>m; area=m*m; cout<<\"正方形的面积:\"<2.定义一个复数类Complex,复数的实部Real与虚部Image定义为私有数据成员。用复数类定义复数对象c1、c2、c3,用默认构造函数将c1初始化为c1=20+40i ,将c2初始化为c2=0+0i,用拷贝构造函数将c3初始化为c3=20+40i。用公有成员函数Dispaly()显示复数c1、c2与c3 的内容。 程序: #include using namespace std; class Complex { private: double real,image; public: Complex(double r,double i); Complex(Complex &c); void Display(); }; Complex::Complex(double r,double i) { real=r; image=i; } Complex::Complex(Complex &c) { real=c.real; image=c.image; } void Complex::Display() { cout<cout<<\"c2=\"; cout<<\"c3=\"; return 0; }运行结果: c2.Display(); c3.Display(); 3.定义一个学生成绩类Score,描述学生成绩的私有数据成员为学号(No)、姓名(Name[8])、数学(Math)、物理(Phi)、数据结构(Data)、平均分(ave)。定义能输入学生成绩的公有成员函数Write(),能计算学生平均分的公有成员函数Average(),能显示学生成绩的公有成员函数Display()。在主函数中用Score类定义学生成绩对象数组s[3]。用Write()输入学生成绩,用Average()计算每个学生的平均分,最后用Display()显示每个学生的成绩。 实验数据: No Name Math Phi Data Ave 1001 Zhou 80 70 60 1002 Chen 90 80 85 1003 Wang 70 75 89 程序: #include #include using namespace std; class Score { private: int No; char Name[10]; float Math,Phi,Data,Ave; void Write(int no,char name[],float math,float phi,float data) { } void Average() { } void Display() { Ave=(Math+Phi+Data)/3; No=no; strcpy(Name,name); Math=math; Phi=phi; Data=data; public:}; } cout<>no>>name>>math>>phi>>data; s[i].Write(no,name,math,phi,data); s[i].Average(); }运行结果: 4.定义一个矩形类Rectangle,矩形的左上角(Left,Top)与右下角坐标(Right,Bottom)定义为保护数据成员。用公有成员函数Diagonal()计算出矩形对角线的长度,公有成员函数Show()显示矩形左上角与右下角坐标及对角线长度。在主函数中用new运算符动态建立矩形对象r1,初值为(10,10,20,20)。然后调用Show()显示矩形左上角与右下角坐标及对角线长度。最后用delete运算符回收为矩形动态分配的存储空间。 程序: #include #include using namespace std; class Rectangle { private: float Left,Top,Right,Bottom;public: }; Rectangle::Rectangle(float left,float top,float right,float bottom):Left(left),Top(top),Right(right),Bottom(bottom) {} float Rectangle::Diagonal() { } void Rectangle::Show() { } int main() { Rectangle *r1; r1=new Rectangle(10,10,20,20); r1->Diagonal(); r1->Show(); delete r1; return 0; cout<<\"矩形左上角坐标: <\"<1.程序: #include using namespace std; class Point { public: }; class Rectangle :public Point { public: }; class Circle :public Point { public: }; class Square :public Point { public: Square(Point ps,int x):Point(ps),len(x) { cout<<\"constructing square\\n\";} ~Square (){ cout<<\"desttucting Square\\n\";} double area() { return len*len;} double length() { return 4*len;} Circle(Point pc,int x):Point(pc),r(x) {cout<<\"constructing circle\\n\";} ~Circle() { cout<<\"destructing Circle\\n\";} double area() {return r*r*3.14;} double length() { return 2*r*3.14;} int r; Rectangle(Point pr,int x,int y):Point(pr),len(x),wid(y) { cout<<\"constructing rectangle\\n\";} ~Rectangle(){cout<<\"destructing rectangle\\n\";} int get_len() {return len;} int get_wid() {return wid;} double area() {return len*wid;} double length() {return 2*(len+wid);} int len,wid; Point(int xx,int yy):x(xx),y(yy) {} int x,y; private: private: private: private:}; int len; int main() { int x,y,len,wid,rad; cin>>x>>y>>len>>wid; Point p1(x,y); cout<<\"p1 has been constructed\"<>x>>y>>rad; Point p2(x,y); Circle c1(p2,rad); cout<<\"c1 has been constructed\"<>x>>y>>len; Point p3(x,y); Square s1(p3,len); cout<<\"s1 has been constructed\"< using namespace std; class Person { char strName[20];int nAge; public: Person(char *name,int age) { strcpy(strName,name); nAge=age; cout<<\"constructor of person\"< #include using namespace std;class Archives { private: }; class Laborage :public Archives { private: }; Archives::Archives(int no,char *name,char sex,int age) { } void Archives::Show() { } Laborage::Laborage(int no,char *name,char sex,int age,float sal,float sec):Archives(no,name,sex,age) { } float Laborage::Count() { } void Laborage::Display() { Show(); cout<} int main() { Laborage lab(1001,\"Cheng\cout<<\"职工号 姓名 性别 年龄 应发工资 社保金 实发工资\"< #include using namespace std; class Person { char Name[8],Sex; int Birth; public: Person(char *name,char sex,int birth) { strcpy(Name,name); Sex=sex; Birth=birth; } void Show() { cout<No=no; Math=math; English=en; strcpy(Major,m); } void St_Display() { cout<<\" 输出学生的信息\"<>name>>sex>>birth>>cl>>no>>m>>en>>math; Student stu(name,sex,birth,cl,no,m,en,math); stu.St_Display(); cout<<\" 请输入职工的信息\"<cout<<\"姓名 性别 出生年月 部门 职务 工资\"<>name>>sex>>birth>>ap>>po>>s; Employee emp(name,sex,birth,ap,po,s); emp.Em_Display(); return 0; }运行结果: 遇到的问题和解决方法 在本实验的第1题目中的坐标似乎没有用处; 实验内容 实验记录 实验6.3(1)(2)(3)(4) 1.程序: #include const double pi=3.14; using namespace std; class Point { double x,y; public: Point(){} Point(int xx,int yy) { x=xx; y=yy; } }; class Shape {public: virtual double area()=0; }; class Rectangle :public Point,public Shape { double len,wid; public: Rectangle(Point p,double l,double w) { len=l; wid=w; } virtual double area() { return len*wid; } }; class Circle :public Point,public Shape { double rad; public: Circle(Point p,double r) { rad=r; } virtual double area() { return pi*rad*rad; } }; class Square :public Point,public Shape { double len; public: Square(Point p,double l):len(l){} /*{ len=l; }*/ virtual double area() { return len*len; } }; void out_area(Shape &s)
{ cout<>x>>y>>len>>wid; Point p1(x,y); Rectangle r1(p1,len,wid); out_area(r1); cin>>x>>y>>rad; Point p2(x,y); Circle c1(p2,rad); out_area(c1); cin>>x>>y>>len; Point p3(x,y); Square s1(p3,len); out_area(s1); getchar(); return 0; } 运行结果: 注解:1 2 3 4 1 2为输入的坐标 ,3 4为矩形的长和宽 ,12为面积 0 0 1 0 0为输入的坐标 ,1 为圆形的半径 ,3.14为面积 0 0 3 0 0为输入的坐标 ,3 为正方形的边长 , 9 为面积 2.编写一个抽象类SHAPE,在此基础上派生出 Rectangle ,Circle,二者都有GetArea()函数计算对象的面积,计算周长的函数GetPerim(); 完善类的功能与结构。 #include const double pi=3.14; using namespace std; class SHAPE { public: virtual void GetArea()=0; virtual void GetPerim()=0; }; class Rectangle :public SHAPE{ double len,wid; public: Rectangle (double l,double w):len(l),wid(w){} virtual void GetArea() { cout<<\"矩形的面积:\"<>len>>wid; Rectangle r1(len,wid); out_Area_Perim(r1); cout<<\"请输入圆的边长:\"; cin>>r; Circle c1(r); out_Area_Perim(c1);return 0; } 运行结果: 3.声明一个车(Vehicle)基类,有Run,Stop等成员函数,由此派生出自行车(Bicycle)类,汽车(Motorcar)类,从(Bicycle)和(Motorcar)派生出摩托车(Motorcycle)类,他们都有Run,Stop等成员函数。利用虚函数解决问题。 #include using namespace std; class Vehicle { public: virtual void Run()=0; virtual void Stop()=0; }; class Bicycle :public Vehicle { public: Bicycle (){} virtual void Run() { cout<<\"bicycle run called\"<cout<<\"motorcar stop called\"< const double pi=3.14; using namespace std; class Shape{ public: }; class Square :public Shape { }; class Rectangle :public Shape { }; class Triangle :public Shape { }; class Circle :public Shape { }; double rad; Circle(double r):rad(r) {} virtual void Area() { } cout<<\"圆的面积:\"<void out_Area(Shape &s) { } int main() { } double len,wid,rad,a,b; cout<<\"请输入正方形的边长:\"; cin>>len; Square s1(len); out_Area(s1); cout<<\"请输入矩形的长和宽:\"; cin>>len>>wid; Rectangle r1(len,wid); out_Area(r1); cout<<\"请输入直角三角形的直角边长:\"; cin>>a>>b; Triangle t1(a,b); out_Area(t1); cout<<\"请输入圆的边长:\"; cin>>rad; Circle c1(rad); out_Area(c1); return 0; s.Area(); 运行结果: 心得体会 在经过多次编写实验程序后,比较了C与C++,二者在编程的思想上完全不同,但是在C++的编译器中,也会用到很多C中的东西,虽然C++后期修改程序上比C要容易了很多,但是在编写过程中要比C要麻烦。虽然编写了这么多的程序,但是对编写的程序如何变成软件还是有很多的疑惑以及更大好奇心。