chap4谭浩强版c++ 部分作业及答案.docx
- 文档编号:10063704
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:20
- 大小:19.33KB
chap4谭浩强版c++ 部分作业及答案.docx
《chap4谭浩强版c++ 部分作业及答案.docx》由会员分享,可在线阅读,更多相关《chap4谭浩强版c++ 部分作业及答案.docx(20页珍藏版)》请在冰点文库上搜索。
chap4谭浩强版c++部分作业及答案
4-1解释public和private的作用,公有类型成员与私有类型成员有些什么区别?
解:
公有类型成员用public关键字声明,公有类型定义了类的外部接口;私有类型的成员用
private关键字声明,只允许本类的函数成员来访问,而类外部的任何访问都是非法的,这样,
私有的成员就整个隐蔽在类中,在类的外部根本就无法看到,实现了访问权限的有效控制。
4-2protected关键字有何作用?
解:
protected用来声明保护类型的成员,保护类型的性质和私有类型的性质相似,其差别在于继
承和派生时派生类的成员函数可以访问基类的保护成员。
4-3构造函数和析构函数有什么作用?
解:
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状
态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数
在对象创建的时候由系统自动调用。
析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也
就是专门作扫尾工作的。
一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自
动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。
4-4数据成员可以为公有的吗?
成员函数可以为私有的吗?
解:
可以,二者都是合法的。
数据成员和成员函数都可以为公有或私有的。
但数据成员最好定义
为私有的。
4-5已知classA中有数据成员inta,如果定义了A的两个对象A1、A2,它们各自的数据
成员a的值可以不同吗?
解:
可以,类的每一个对象都有自己的数据成员。
4-6什么叫做拷贝构造函数?
拷贝构造函数何时被调用?
解:
拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象
的引用,其作用是使用一个已经存在的对象,去初始化一个新的同类的对象。
在以下三种情
况下会被调用:
在当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对
象,调用函数进行形参和实参结合时;如果函数的返回值是类对象,函数调用完成返回时;
4-7拷贝构造函数与赋值运算符(=)有何不同?
解:
赋值运算符(=)作用于一个已存在的对象;而拷贝构造函数会创建一个新的对象。
4-8定义一个Dog类,包含的age、weight等属性,以及对这些属性操作的方法。
实现并测
试这个类。
解:
源程序:
#include
usingnamespacestd;
classDog
{
public:
Dog(intA=0,intW=0);
~Dog(){};
voidsetAge(intnewA)
{
age=newA;
}
voidsetWeight(intnewW)
{
weight=newW;
}
intshowAge()
{
returnage;
}
intshowWeight()
{
returnweight;
}
private:
intage;
intweight;
};
Dog:
:
Dog(intA,intW)
{
age=A;
weight=W;
}
voidmain()
{
Dogmydog(5,16);
mydog.showAge();
mydog.showWeight();
cout<<"mydog'sageis"< cout<<"mydog'sweightis"< mydog.setAge(8); mydog.setWeight(20); cout<<"nowmydog'sageis"< cout<<"mydog'sweightis"< } 4-9设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐 标,能计算矩形的面积。 解: 源程序: #include usingnamespacestd; classpoint { public: point(intxx=0,intyy=0) { x=xx; y=yy; } intgetx() { returnx; } intgety() { returny; } private: intx,y; }; classRectangle { public: Rectangle(pointxp1,pointxp2); intgetarea() { returnarea; } private: pointp1; pointp2; intarea; }; Rectangle: : Rectangle(pointxp1,pointxp2) { p1=xp1; p2=xp2; intheight=p2.gety()-p1.gety(); intwidth=p2.getx()-p1.getx(); area=height*width; } intmain() {pointa(1,1),b(4,5); Rectanglemyrectangle(a,b); cout<<"myrectangle'sareais: "< return0; } 4-10设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型 人员都具有的属性: number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等 等。 其中"出生日期"定义为一个"日期"类内嵌子对象。 用成员函数实现对人员信息的录入和 显示。 要求包括: 构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成 员函数、聚集。 解: #include #include usingnamespacestd; classDate//日期类 { private: intyear; intmonth; intday; public: Date(){}//默认构造 Date(inty,intm,intd)//带参构造 { year=y; month=m; day=d; } voidset()//设置数据函数 { cin>>year>>month>>day; } voiddisplay()//显示函数 { cout< } }; classPerson//人员类 { private: intnum; charsex; Datebirthday; charID[18]; public: Person(){}//默认构造 Person(intn,inty,intm,intd,charid[18],chars='m'): birthday(y,m,d) { num=n; sex=s; strcpy(ID,id); }//有默认值的带参构造 Person(Person&p)//拷贝构造 { num=p.num; sex=p.sex; birthday=p.birthday; strcpy(ID,p.ID); } voidinput()//输入函数 { cout<<"录入数据: "< cout<<"编号: "; cin>>num; cout<<"性别(m/f): "; cin>>sex; cout<<"生日: "; birthday.set(); cout<<"身份证号: "; cin>>ID; ID[18]='\0'; cout< } voidoutput()//输出函数 { cout<<"编号: "< cout<<"性别: "< cout<<"生日: "; birthday.display(); cout< cout<<"身份证号: "< } ~Person()//析构函数 { cout<<""< } }; intmain() { Personp1; p1.input(); p1.output(); return0; } 4-11定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积 解: #include usingnamespacestd; classRectangle { public: Rectangle(floatlen,floatwid) { length=len; width=wid; } ~Rectangle(){}; floatgetlen() { returnlength; } floatgetwid() { returnwidth; } floatgetarea(); private: floatlength; floatwidth; }; floatRectangle: : getarea() { returnlength*width; } voidmain() { floatlength,width; cout<<"请输入矩形的长度: "; cin>>length; cout<<"请输入矩形的宽度: "; cin>>width; Rectangler(length,width); cout<<"长为"< " < } 4-12定义一个"数据类型"datatype类,能处理包含字符型、整型、浮点型三种类型的数据, 给出其构造函数。 解: #include classdatatype { enum { character, integer, floating_point }vartype; union { charc; inti; floatf; }; public: datatype(charch) { vartype=character; c=ch; } datatype(intii) { vartype=integer; i=ii; } datatype(floatff) { vartype=floating_point; f=ff; } voidprint(); }; voiddatatype: : print() { switch(vartype) { casecharacter: cout<<"字符型: "< break; caseinteger: cout<<"整型: "< break; casefloating_point: cout<<"浮点型: "< break; } } voidmain(){ datatypeA('c'),B(12),C(1.44F); A.print(); B.print(); C.print(); } 4-13定义一个Circle类,有数据成员半径Radius,成员函数GetArea(),计算圆的面积,构 造一个Circle的对象进行测试。 解: #include usingnamespacestd; constfloatPI=3.141593; classCircle { public: Circle(floatr) { radius=r; } floatgetarea(); private: floatradius; }; floatCircle: : getarea() { returnPI*radius*radius; } voidmain() {floata; cout<<"pleaseinputtheradius: "< cin>>a; Circlemycircle(a); cout<<"thecircle'sareais: "< } 4-14定义一个tree类,有成员ages,成员函数grow(intyears)对ages加上years,age()显示tree 对象的ages的值。 #include classTree { intages; public: Tree(intn=0); ~Tree(); voidgrow(intyears); voidage(); }; Tree: : Tree(intn) { ages=n; } Tree: : ~Tree() { age(); } voidTree: : grow(intyears) { ages+=years; } voidTree: : age() { cout<<"这棵树的年龄为"< } voidmain() { Treet(12); t.age(); t.grow(4); } /*2011-10-25 providedtyLiuHui 4-19编写一个名为CPU的类,描述一个CPU的以下信息: 时钟频率,最大不会超过3000MHz;字长,可以是32为或是64位;核数,可以是单核,双核或四核;是否支持超线程。 各信息要求使用位域来表示。 通过输出sizeof(CPU)来观察该类所占的字节数。 */ #include usingnamespacestd; classCPU//定义一个CPU类 { private: //CPU类的私有成员 doubleclockrate;//时钟频率,最大不超过3000MHz intwordsize;//字长,32或64bit intheshu;//可单核,双核或四核 boolm;//是否支持超线程 public: CPU(doubleNewclockrate,intNewwordsize,intNewheshu,boolNewm)//构造函数 {clockrate=Newclockrate; wordsize=Newwordsize; heshu=Newheshu; m=Newm; } voiddescribe();//描述CPU信息的函数 }; voidCPU: : describe()//描述CPU信息的函数 { cout<<"时钟频率为: "< cout<<"字长为: "< cout<<"核数为: "< if(m==true) cout<<"支持超线程\n"; else cout<<"不支持超线程\n"; } intmain() { CPUMyCPU(2500,32,4,true);//初始化一个CPU类的对象c MyCPU.describe();//描述这个对象c cout<<"CPU类在内存中所占的字节数为: "; cout< cout<<"CPU对象在内存中所占的字节数为: "; cout< return0; } /*2011-10-25 providedtyLiuHui 4-20定义一个复数Complex,使得下面的代码能够工作。 Complexc1(3,5);//用复数3+5i初始化c1 Complexc2=4.5;//用实数4.5初始化c2 c1.sdd(c2);//将c1与c2相加,结果保存在c1中 C1.show();//将c1输出(这时的结果应该是7.5+5i) */ #include usingnamespacestd; classComplex//定义一个Complex类 { public: Complex(floatr1,floati1);//有虚部的复数构造函数的声明 Complex(floatr);//无虚部复数的构造函数的声明 voidadd(Complex&c); voidshow(); private: floatreal; floati; }; Complex: : Complex(floatr1,floati1)//有虚部的复数构造函数的实现 { real=r1; i=i1; } Complex: : Complex(floatr1)//无虚部复数的构造函数的实现 { real=r1; i=0; } voidComplex: : add(Complex&c)//add函数的实现 { real=real+c.real; i=i+c.i; } voidComplex: : show()//show函数的实现 { cout< '+': '-')< } intmain() { Complexc1(3,5); Complexc2=4.5; c1.add(c2);//将对象c2作为参数计算c1+c2 c1.show(); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chap4谭浩强版c+ 部分作业及答案 chap4 谭浩强版 c+ 部分 作业 答案