实 验 十
任务1:程序调试与程序设计。类与构造函数、对象的定义。
调试下列程序,程序描述了一个圆柱的类,成员中有私有数据半径r及高h,公有的成员函数有构造函数与输出圆柱参数的函数,在main函数中,输入两个参数,定义并初始化此类的一个对象,对象调用输出圆柱参数的函数。
程序代码如下:
#include \"stdafx.h\"
#include using namespace std; class column { private: double r,h; public: column(double ri,double hi) { r=ri; h=hi; } void prin() { cout<<\"圆柱的高为:\"< }; int main() { column c(3,10); c.prin(); return 0; } (1)请调试次程序。 (2)再定义计算圆柱面积与体积的私有成员函数,在公有的成员函数prin中调用,在main函数中输入半径r及高h,请设计程序并调试。 程序设计如下: #include \"stdafx.h\" #include using namespace std; #define pi 3.1415926 class column { private: double r,h; public: column(double ri,double hi) { r=ri; h=hi; } double area(){ double s; s=2*pi*r*r+2*pi*r*h; return s; } double v(){ return pi*r*r*h;} void prin() { cout<<\"圆柱的面积为:\"<} }; int main() { column c(3,10); c.area(); c.v(); c.prin(); return 0; } (3)在main函数中也能以下列形式定义对象,请重新设计程序。 Column c; 程序设计如下: #include \"stdafx.h\" #include using namespace std; class column { private: double r,h; public: column(double ri=3,double hi=10) { r=ri; h=hi; } double area(){ double s; s=2*3.14*r*r+2*3.14*r*h; return s; } double v(){ return 3.14*r*r*h;} void prin() { cout<<\"圆柱的面积为:\"<} }; int main() { column c; c.area(); c.v(); c.prin(); return 0; } 任务2:程序设计。重载构造函数的类设计。 有一个类A,其中测试函数main为: int main( ) { A a; A b(35); A c(32,90); a.print( ); b.print( ); c.print( ); return 0; } 程序的执行结果为: 执行无参构造函数:x=0,y=0 执行有一个参数的构造函数:x=35,y=0 执行有二个参数的构造函数:x=32,y=90 运算的结果为:s=0 运算的结果为:s=35 运算的结果为:s=122 执行析构函数:x=32,y=90 执行析构函数:x=35,y=0 执行析构函数:x=0,y=0 请定义类,完成类中构造函数与析构函数的定义。 程序设计为: #include \"stdafx.h\" #include using namespace std; class A { private: int x,y; public: A(){ x=0; y=0; cout<<\"执行无参构造函数:\"<<\"x=\"< A(int xi){ x=xi; y=0; cout<<\"执行有一个参数的构造函数:\"<<\"x=\"< A(int xi,int yi){ x=xi; y=yi; cout<<\"执行有二个参数的构造函数:\"<<\"x=\"< void print( ){ cout<<\"运算的结果为:\"<<\"s=\"< ~A(){ cout<<\"执行析构函数:\"<<\"x=\"< }; int _tmain(int argc, _TCHAR* argv[]) { A a; A b(35); A c(32,90); a.print(); b.print(); c.print(); return 0; } 任务3:程序设计。类与构造函数、对象的定义。 设计一个表示猫的类Cat,包括猫的颜色、体重、年龄(Color, weight, age,)等数据,并且具有设置或修改猫的颜色、体重、年龄的功能,也能显示猫的颜色、体重、年龄等操作。 程序设计如下: #include \"stdafx.h\" #include using namespace std; #include class cat { private: char ch[80]; double weight; int age; public: cat(char c[80],double wei,int a){ strcpy(ch,c); weight=wei; age=a; } void print(){ cout<<\"猫的颜色是:\"< }; int main() { char ch1[80]; double weight1; int age1; cin>>ch1>>weight1>>age1; cat A(ch1,weight1,age1); A.print(); return 0; } 运行结果如下: 任务4:程序设计 设计一个长方体类,用它能计算不同长方体的体积和表面积。 提示:在这个类Box中必须要有3个私有数据:长、宽、高(分别用a、b、c表示), 构造函数Box(int i,int j,int k)和计算体积GetVolume()、表面积GetArea()的成员函数 程序设计为: #include class box { private: int a,b,c; public: box(int i,int j,int k){ a=i; b=j; c=k; } void getvolume(){ int s; s=a*b*c; cout<<\"长方体的体积是:\"< void getarea(){ int s1; s1=2*(a*b+b*c+a*c); cout<<\"长方体的表面积是:\"< }; int main() { int x,y,z; cin>>x>>y>>z; box A(x,y,z); A.getvolume(); A.getarea(); return 0; } 任务5:程序调试。重载构造函数的定义。 (1)定义一个类,根据对象初始化时的参数不同,对象自动调用重载的构造函数调用。 程序如下: #include \"stdafx.h\" #include using namespace std; #include class date { int year,month,day; public: date(int m,int d); date(int y,int m,int d); void print(); }; date::date(int y,int m,int d) { year=y; month=m; day=d; cout<<\"3 date constructor called\"< date::date(int m,int d) { year=2012; month=m; day=d; cout<<\"2 date constructor called\"< void date::print() { cout<<\"今天是\"< int _tmain(int argc, _TCHAR* argv[]) { date DATE1(10,1),DATE2(2012,5,15); DATE1.print(); DATE2.print(); return 0; } (2)如果把main函数写成: { date DATE1(10,1),DATE2(2012,5,15),DATE3(); DATE1.print(); DATE2.print(); return 0; } 程序能通过编译吗?请重新设计程序。 程序如下: #include \"stdafx.h\" #include using namespace std; #include class date { int year,month,day; public: date(int m,int d); date(int y,int m,int d); void print(); }; date::date(int y,int m,int d) { year=y; month=m; day=d; cout<<\"3 date constructor called\"< date::date(int m,int d) { year=2012; month=m; day=d; cout<<\"2 date constructor called\"< void date::print() { cout<<\"今天是\"< int _tmain(int argc, _TCHAR* argv[]) { date DATE1(10,1),DATE2(2012,5,15),DATE3(); DATE1.print(); DATE2.print(); return 0; } 任务6:程序调试。默认值的构造函数设计。 程序如下: #include \"stdafx.h\" #include using namespace std; #include class date { private: int year,month,day; public: date(int y,int m,int d); void print(); }; date::date(int y=2012,int m=01,int d=01) { year=y; month=m; day=d; cout<<\"date constructor called\"< void date::print() { cout<<\"今天是\"< int _tmain(int argc, _TCHAR* argv[]) { date A(2012,5,15),B(2013); A.print(); B.print(); return 0; } (1)调试程序。 (2)如果把“date A(2012,5,15),B(2013)”替换成“date A(2012,10),B()”,编译时能通过吗?请调试。 答:不能。 (3)如果把 “date(int y,int m,int d)”替换成“date(int y=2012,int m=01,int d=01)”,编译时能通过吗? 答:不能通过,date::date重复定义默认参数。 任务7:程序调试。拷贝构造函数设计。 拷贝构造函数的应用 代码如下: #include \"stdafx.h\" #include #include using namespace std; class Person { private: char *buffer; int age; public: Person(const Person &me); Person(char *p,int a); void Display(); }; Person::Person(const Person &me) { buffer=new char[strlen(me.buffer)+1]; strcpy(buffer,me.buffer); this->age=me.age; } Person::Person(char *p,int a) { buffer=new char[strlen(p)+1]; strcpy(buffer,p); age=a; } void Person::Display() { cout<<\"The name is\"< int _tmain(int argc, _TCHAR* argv[]) { Person A(\"Liu\",50); Person B(A); B.Display(); return 0; } 任务8:程序设计。拷贝构造函数设计。 设计一个矩形类热冲突,其数据成员定义为长double length和宽double width。除了设计类所需的函数,再设计一个拷贝构造函数。用拷贝构造函数产生的新对象的长比原矩形多20,宽是原来矩形的三倍,并且在测试函数main中建立对象测试此类。 程序如下: #include \"stdafx.h\" #include using namespace std; class Rect { private: double Length,width; public: Rect(double a=0,double b=0); Rect(Rect&); int Show(); ~Rect(){cout<<\"~ Rect called\"< Rect::Rect(double a,double b) { Length=a; width=b; } Rect::Rect(Rect &x) { Length=20+x.Length; width=3*x.width; } int Rect::Show() { cout<<\"矩形的面积是:\"< } void main( ) { double a,b; cout<<\"请输入矩形的长与宽:\"< 矩形的周长是\"Rect Obj1(a,b); Obj1.Show(); Rect Obj2(Obj1); Obj2.Show(); 运行结果如下: } 因篇幅问题不能全部显示,请点此查看更多更全内容}