构造函数2.docx
《构造函数2.docx》由会员分享,可在线阅读,更多相关《构造函数2.docx(10页珍藏版)》请在冰豆网上搜索。
![构造函数2.docx](https://file1.bdocx.com/fileroot1/2023-1/8/3b56541d-2cae-4108-a8cb-6427ea8226f5/3b56541d-2cae-4108-a8cb-6427ea8226f51.gif)
构造函数2
1创建一个Employ类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。
该类中构造函数初始化每个成员,display()函数打印数据成员。
classEmployee{
public:
Employee(char*n,char*a,char*c,char*s,char*z);
voidDisplay();
protected:
charname[20];
charaddr[40];
charcity[20];
charstate[20];
charzip[10];
};
Employee:
:
Employee(char*n,char*a,char*c,char*s,char*z)
{
strncpy(name,n,20);
name[19]='\0';
strncpy(addr,a,40);
addr[39]='\0';
strncpy(city,c,20);
city[19]='\0';
strncpy(state,s,20);
state[19]='\0';
strncpy(zip,z,10);
zip[9]='\0';
}
voidEmployee:
:
Display()
{
cout<<<<}
voidmain()
{
Employem("MarkBrooks","5WestSt.","Revere","CA","12290");
em.Display();
em.Display();
}
2一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。
栅栏价格为35元/米,过道造价为20元/平方米。
过道宽度为3米,游泳池半径由键盘输入。
要求编程计算并输出过道和栅栏的造价。
#include
usingnamespacestd;
constfloatPI=3.14159;
#definePI3.1415926
constfloatFencePrice=35;
constfloatConcretePrice=20;
classCircle//声明类Circle及其数据和方法
{
private:
floatradius;
public:
Circle(floatr);//构造函数
floatCircumference();//圆周长
floatArea();//圆面积
};
Circle:
:
Circle(floatr)//构造函数初始化数据成员radius
{radius=r;}
floatCircle:
:
Circumference()//计算圆的周长
{
return2*PI*radius;
}
floatCircle:
:
Area()//计算圆的面积
{
returnPI*radius*radius;
}
voidmain()
{
floatradius;
floatFenceCost,ConcreteCost;
cout<<"Entertheradiusofthepool:
";
//提示用户输入半径
cin>>radius;
CirclePool(radius);//声明Circle对象
CirclePoolRim(radius+3);
FenceCost=PoolRim.Circumference()*FencePrice;
//计算栅栏造价并输出
cout<<"FencingCostis¥"<ConcreteCost=(PoolRim.Area()-Pool.Area())*ConcretePrice;
//计算过道造价并输出
cout<<"ConcreteCostis¥"<}
1.选择题
(1)对类的构造函数和析构函数描述正确的是()。
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
(2)类的析构函数的作用是()。
A.一般成员函数B.类的初始化C.对象初始化D.删除对象
(3)假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。
A.OneClass(OneClassp);B.OneClass&(OneClassp);
C.OneClass(OneClass&p);D.OneClass(OneClass*p);
(4)下列不是描述类的成员函数的是()
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
(5)构造函数不具备的特征的是()
A.构造函数的函数名与类名相同
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数必须指定类型说明
(6)通常,拷贝构造函数的参数是()
A.某个对象名B.某个对象的成员名
C.某个对象的引用名D.某个对象的指针名
(7)类的析构函数的作用是()
A.一般成员函数B.类的初始化
C.对象的初始化D.删除对象创建的所有对象
(8)类的析构函数是在()调用的。
A.类创建时B.创建对象时
C.删除对象时D.不自动调用
(9)下面()项是对构造函数和析构函数的正确定义。
A.voidX:
:
X(),voidX:
:
~X()
B.X:
:
X(参数),X:
:
~X()
C.X:
:
X(参数),X:
:
~X(参数)
D.voidX:
:
X(参数),voidX:
:
~X(参数)
(10)()的功能是对象进行初始化。
A.析构函数B.数据成员C.构造函数D.静态成员函数
(11)拷贝构造函数具有的下列特点中,()是错误的。
A如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的
B拷贝构造函数只有一个参数,并且是该类对象的引用
C拷贝构造函数是一种成员函数
D拷贝构造函数的名字不能用类名
二读程序
#include
classDate
{public:
Date(int,int,int);
Date(int,int);
Date(int);
Date();
~Date(){cout<<“调用析构函数”<voiddisplay();
private:
intmonth;
intday;
intyear;
};
Date∷Date(intm,intd,inty){month=m;day=d;year=y;}
Date∷Date(intm,intd)
{year=2005;month=m;day=d;}
Date∷Date(intm)
{day=1;year=2005;month=m;}
Date∷Date()
{month=1;day=1;year=2005;}
voidDate∷display()
{cout<intmain()
{Dated1(10,13,2005);
Dated2(12,30);
Dated3(10);
Dated4;
d1.display();
d2.display();
d3.display();
d4.display();
return0;}
3:
下列程序的运行结果是。
#include
voidmax(Student*);
usingnamespacestd;
classStudent
{public:
Student(intn,floats):
num(n),score(s){}
intnum;
floatscore;
};
voidmain()
{Studentstud[5]={
Student(101,78.5),Student(102,85.5),Student(103,98.5),
Student(104,100.0),Student(105,95.5)};
Student*p=&stud[0];
max(p);
}
voidmax(Student*arr)
{floatmax_score=arr[0].score;
intk=0;
for(inti=1;i<5;i++)
if(arr[i].score>max_score){max_score=arr[i].score;k=i;}
cout<}
5
#include
classTpoint
{
public:
Tpoint(intxp,intyp){x=xp;y=yp;}
Tpoint(Tpoint&p);
intxcoord(){returnx;}
intycoord(){returny;}
private:
intx,y;
};
Tpoint:
:
Tpoint(Tpoint&p)
{
x=p.x;
y=p.y;
cout<<“Copy_initializationconstructorcalled.\n”;
}
voidmain()
{
Tpointp1(5,7);
Tpointp2(p1);
cout<<“p2=”<}
结果:
改错.分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。
#include
classone
{inta1,a2;
public:
one(intx1=0,x2=0);
};
voidmain()
{onedata(2,3);
cout<cout<3.分析以下程序的错误原因,给出修改方案使之能正确运行。
#include
classAmplifier{
floatinvol,outvol;
public:
Amplifier(floatvin,floatvout)
{invol=vin;outvol=vout;}
floatgain();
};
FloatAmplifier:
:
gain(){returnoutvol/invol;}
voidmain()
{Amplifieramp(5.0,10.0);
cout<<"\n\nThegainis=>"<}
编程
1.建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。
#include
usingnamespacestd;
classStudent
{public:
Student(intn,floats):
num(n),score(s){}
voiddisplay();
private:
intnum;
floatscore;
};
voidStudent:
:
display()
{cout<intmain()
{Studentstud[5]={
Student(101,78.5),Student(102,85.5),Student(103,98.5),
Student(104,100.0),Student(105,95.5)};
Student*p=stud;
for(inti=0;i<=2;p=p+2,i++)
p->display();
return0;
}
2建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
#include
#include
classEmploy
{public:
voiddisplay();
private:
charname[30];
charsweetad[100];
charcityca[100];
charyouzhen[20];
};
charname(){};
charsweetad(){};
charcityca(){};
charyouzhen(){};
voidEmploy∷display()
{cout<<<voidmain()
{
charname[30]="wuguoyong";
charsweetad[100]="xiamenjimenqu";
charcityca[100]="fujianshengputianshifushi;
charyouzhen[20]="351146";
name.display();
sweetad.display();
cityca.display();
youzhen.display();
return0;}