第6次作业.docx
《第6次作业.docx》由会员分享,可在线阅读,更多相关《第6次作业.docx(17页珍藏版)》请在冰豆网上搜索。
第6次作业
1.构造函数的说明
a)无返回类型
b)函数名同类名
c)在创建对象时被自动调用
d)可重载或带默认参数值
e)若不自定义构造函数,系统提供默认的无参构造函数(不做任何工作,函数体为空);若自定构造函数,系统则不再提供无参构造函数。
f)构造函数定义形式不同,创建对象的形式不同。
2.析构函数的说明
a)无返回类型
b)函数名:
~类名
c)无参,不能重载,一个类中只有1个析构函数
d)在对象生存期结束时被自动调用
3.总结
a)析构函数执行顺序与构造函数相反
b)类定义中一般都自定义构造函数(为数据成员初始化),若类定义中申请了动态内存空间,则需要自定义析构函数,否则可不自定义析构函数。
程序设计练习(在第5次作业的基础上进行修改:
增加构造函数与析构函数)
1.编写圆类Circle,包含:
一个名为radius的double型数据成员,表示圆形的半径。
无参构造函数,半径默认值为1
有参构造函数
析构函数,输出”destructoriscalled”及半径值。
数据成员的获取函数getRadius和设置函数setRadius。
一个名为getArea()的函数,返回圆形的面积。
一个名为getPerimeter()的函数,返回圆形的周长
编写一个测试程序,它创建2个Circle类对象,将第一个圆形的半径设置为1,第2个圆形的半径设置为2,并输出两个圆形对象的半径、面积和周长。
观察析构函数执行的顺序。
//以下为Circle类的声明部分:
circle.h
classCircle
{
private:
doubleradius;
public:
Circle();
Circle(doubler);
~Circle();
doublegetArea();
doublegetPerimeter();
doublegetRadius();
voidsetRadius(double);
};
//以下为Circle类的实现部分:
circle.cpp
#include"circle.h"
#include
Circle:
:
Circle()
{
radius=1;
cout<<"no-argconstructoriscalled:
"<}
Circle:
:
Circle(doubler)
{
radius=r;
cout<<"1-argconstructoriscalled:
"<}
Circle:
:
~Circle()
{
cout<<"destructoriscalled:
"<}
doubleCircle:
:
getArea()
{
return3.14*radius*radius;
}
doubleCircle:
:
getPerimeter()
{
return2*3.14*radius;
}
doubleCircle:
:
getRadius()
{
returnradius;
}
voidCircle:
:
setRadius(doubler)
{
radius=r;
}
//测试Circle类以下为test.cpp
#include"circle.h"
#include
voidmain()
{
Circlea,b
(2);//创建两个对象,对象名分别为a,b
cout<<"radius="<cout<<"area="<cout<<"perimeter="<cout<cout<<"radius="<cout<<"area="<cout<<"perimeter="<}
2.编写矩形类Rectangle,包含:
两个名为width和height的double型数据成员,分别表示矩形的宽和高。
无参构造函数,宽与高的值为1。
有1个参数的构造函数,高的值为1。
有2个参数的构造函数。
析构函数,输出”destructoriscalled”及宽、高的值。
单个数据成员的获取函数和设置函数以及对两个数据成员的同时获取的函数和同时设置的函数,各函数名为:
getWidth,getHeight,setWidth,setHeight,setWH,getWH。
一个名为getArea()的函数,返回矩形的面积。
一个名为getPerimeter()的函数,返回矩形的周长。
编写一个测试程序,它创建2个Rectangle对象,将第一个矩形的宽/高设置为4、5,第2个矩形的宽/高设置为3、2,并输出两个矩形对象的高、宽、面积和周长。
//以下为Rectangle类的声明部分,rectangle.h
classRectangle
{
private:
doublewidth,height;
public:
Rectangle();
Rectangle(double);
Rectangle(double,double);
~Rectangle();
doublegetArea();
doublegetPerimeter();
doublegetWidth();
doublegetHeight();
voidgetWH(double&,double&);
voidsetWidth(double);
voidsetHeight(double);
voidsetWH(double,double);
};
//以下为Rectangle类的实现部分,rectangle.cpp
#include"rectangle.h"
#include
Rectangle:
:
Rectangle()
{
width=1;
height=1;
cout<<"no-argconstructoriscalled:
"<}
Rectangle:
:
Rectangle(doublew)
{
width=w;
height=1;
cout<<"1-argconstructoriscalled:
"<}
Rectangle:
:
Rectangle(doublew,doubleh)
{
width=w;
height=h;
cout<<"2-argconstructoriscalled:
"<}
Rectangle:
:
~Rectangle()
{
cout<<"destructoriscalled:
"<}
doubleRectangle:
:
getArea()
{
returnwidth*height;
}
doubleRectangle:
:
getPerimeter()
{
return2*(width+height);
}
doubleRectangle:
:
getWidth()
{
returnwidth;
}
doubleRectangle:
:
getHeight()
{
returnheight;
}
voidRectangle:
:
setWidth(doublew)
{
width=w;
}
voidRectangle:
:
setHeight(doubleh)
{
height=h;
}
voidRectangle:
:
setWH(doublew,doubleh)
{
width=w;
height=h;
}
voidRectangle:
:
getWH(double&w,double&h)
{
w=width;
h=height;
}
//以下为测试Rectangle类,test.cpp
#include"rectangle.h"
#include
voidmain()
{
Rectanglea;//创建a对象
doublew,h;
a.getWH(w,h);//获得a的高与宽
cout<<"width="<cout<<"area="<cout<<"perimeter="<cout<Rectangleb(10);//创建b对象
cout<<"width="<cout<<"area="<cout<<"perimeter="<cout<Rectanglec(20,3);
cout<<"width="<cout<<"area="<cout<<"perimeter="<cout<}
3.编写圆柱体类Cylinder,包含:
名为radius的double型数据成员,表示圆的半径,名为height的double型数据成员,表示高。
无参构造函数,高与半径的值均为1。
有2个参数的构造函数。
单个数据成员的访问和更改函数,以及两个成员的访问和更改函数。
一个名为getSurfaceArea的函数,返回表面积;
一个名为getVolume的函数,返回体积。
编写一个测试程序,它创建1个Cylinder类对象c,将半径设置为2,高为10,分别输出对象c的半径、高、表面积和体积。
创建第2个对象d,将c赋给d,分别输出对象d的半径、高、表面积和体积。
//以下为Cylinder的声明部分,cylinder.h
classCylinder
{
doubleradius,height;
public:
Cylinder();
Cylinder(doubleh,doubler);
doublegetHeight();
doublegetRadius();
voidgetHR(double&h,double&r);
voidsetHeight(double);
voidsetRadius(double);
voidsetHR(double,double);
doublegetSurfaceArea();
doublegetVolume();
};
//以下为Cylinder类的实现部分,cylinder.cpp
#include"Cylinder.h"
Cylinder:
:
Cylinder()
{
height=1;
radius=1;
}
Cylinder:
:
Cylinder(doubleh,doubler)
{
height=h;
radius=r;
}
doubleCylinder:
:
getHeight()
{
returnheight;
}
doubleCylinder:
:
getRadius()
{
returnradius;
}
voidCylinder:
:
getHR(double&h,double&r)
{
h=height;
r=radius;
}
voidCylinder:
:
setRadius(doubler)
{
radius=r;
}
voidCylinder:
:
setHeight(doubleh)
{
height=h;
}
voidCylinder:
:
setHR(doubleh,doubler)
{
height=h;
radius=r;
}
doubleCylinder:
:
getSurfaceArea()
{
return2*3.14*radius*radius+2*3.14*radius*height;
}
doubleCylinder:
:
getVolume()
{
return3.14*radius*radius*height;
}
//以下为test.cpp
#include"cylinder.h"
#include
voidmain()
{
Cylinderc;
doublea,b;
c.getHR(a,b);
cout<cout<cout<Cylinderd(10,2);
doublex,y;
x=d.getHeight();
y=d.getRadius();
cout<cout<cout<}
4.编写复数类Complex,包含:
两个数据成员,表示实部与虚部;
有2个参数的构造函数,且带默认参数值,值均为0
析构函数,输出"destructoriscalled."及实部与虚部的值。
同时设置两个数据成员的设置函数,且带默认参数值,默认值均为0;
同时获取两个数据成员的获取函数,以及每个数据成员的获取函数;
取模函数;
输出函数
编写测试程序,创建Complex类对象,分别对各个成员函数进行测试。
//以下为complex.h文件
classComplex
{
private:
doublereal,imag;
public:
Complex(doubler=0,doublei=0);
~Complex();
voidsetRI(double=0,double=0);
doublegetReal();
doublegetImag();
voidgetRI(double&,double&);
doublegetMod();
voidprint();
};
//以下为complex.cpp
#include"complex.h"
#include
#include
Complex:
:
Complex(doubler,doublei)
{
real=r;
imag=i;
cout<<"constructoriscalled."<}
Complex:
:
~Complex()
{
cout<<"destructoriscalled."<}
voidComplex:
:
setRI(doubler,doublei)
{
real=r;
imag=i;
}
doubleComplex:
:
getReal()
{
returnreal;
}
doubleComplex:
:
getImag()
{
returnimag;
}
voidComplex:
:
getRI(double&r,double&i)
{
r=real;
i=imag;
}
doubleComplex:
:
getMod()
{
returnsqrt(real*real+imag*imag);
}
voidComplex:
:
print()
{
if(imag>0)
cout<elseif(imag<0)
cout<else
cout<}
//以下为test.cpp文件
#include"complex.h"
#include
voidmain()
{
Complexc1;
cout<c1.print();
Complexc2(2,2);
cout<c2.print();
Complexc3(-2.5);
cout<c3.print();
}
5.定义整型数组类CArray,包括:
两个数据成员,整型指针变量(表示数组首地址)及整型变量(表示数组长度)。
构造函数,有1个参数且带默认参数值5。
析构函数,释放动态内存。
设置某个数组元素的值
获取某个数组元素的值
测试该数组类:
创建一个包含有5个元素的对象a,为数组元素分别赋值为1,2,3,4,5,求数组元素的平均值,并输出各个数组元素与平均值。
创建一个包含有10个数组元素的数组,从键盘输入各个数组元素,而后计算平均值,并输出各个数组元素的值及平均值。
//carray.h,类的声明
classCArray
{
public:
CArray(intn1=5);//创建包含n1个数组元素的整型数组。
~CArray();//析构函数,删除动态申请的数组空间
intgetAt(inti);//得到下标为i的数组元素的值
voidsetAt(inti,intx);
//将下标为i的数组元素的值设置为x.
private:
int*p;//整型数组首地址
intn;//数组中的元素个数
};
//carray.cpp,类的实现
#include"carray.h"
#include
CArray:
:
CArray(intn1)
{
n=n1;
p=newint[n];//申请动态内存
cout<<"constructoriscalled:
"<}
CArray:
:
~CArray()
{
delete[]p;//释放动态内存
cout<<"destructoriscalled:
"<}
intCArray:
:
getAt(inti)
{
returnp[i];
}
voidCArray:
:
setAt(inti,intx)
{
p[i]=x;
}
//test.cpp,类的测试
#include"carray.h"
#include
voidmain()
{
CArrayt(10);
for(inti=0;i<10;i++)
t.setAt(i,i+1);
intsum1=0;
for(i=0;i<10;i++)
sum1+=t.getAt(i);
for(i=0;i<10;i++)
cout<cout<cout<CArrays;
intx;
cout<<"plzenter5integers:
";
for(i=0;i<5;i++)
{
cin>>x;
s.setAt(i,x);
}
intsum2=0;
for(i=0;i<5;i++)
{
cout<sum2+=s.getAt(i);
}
cout<cout<}