您的当前位置:首页正文

c++程序设计实验辅导及习题解答-实验10

2021-11-25 来源:好走旅游网


实 验 十

任务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<<\"猫的颜色是:\"<cout<<\"猫的体重是:\"<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<<\"矩形的面积是:\"<return 1;

}

void main( )

{

double a,b;

cout<<\"请输入矩形的长与宽:\"<cin>>a>>b;

矩形的周长是\"Rect Obj1(a,b);

Obj1.Show();

Rect Obj2(Obj1);

Obj2.Show();

运行结果如下:

}

因篇幅问题不能全部显示,请点此查看更多更全内容