chap4(谭浩强版)_c++ 部分作业及答案.docx_第1页
chap4(谭浩强版)_c++ 部分作业及答案.docx_第2页
chap4(谭浩强版)_c++ 部分作业及答案.docx_第3页
chap4(谭浩强版)_c++ 部分作业及答案.docx_第4页
chap4(谭浩强版)_c++ 部分作业及答案.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4-1 解释public 和private 的作用,公有类型成员与私有类型成员有些什么区别?解:公有类型成员用public 关键字声明,公有类型定义了类的外部接口;私有类型的成员用private 关键字声明,只允许本类的函数成员来访问,而类外部的任何访问都是非法的,这样,私有的成员就整个隐蔽在类中,在类的外部根本就无法看到,实现了访问权限的有效控制。4-2 protected 关键字有何作用?解:protected 用来声明保护类型的成员,保护类型的性质和私有类型的性质相似,其差别在于继承和派生时派生类的成员函数可以访问基类的保护成员。4-3 构造函数和析构函数有什么作用?解:构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数在对象创建的时候由系统自动调用。析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也就是专门作扫尾工作的。一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。4-4 数据成员可以为公有的吗?成员函数可以为私有的吗?解:可以,二者都是合法的。数据成员和成员函数都可以为公有或私有的。但数据成员最好定义为私有的。4-5 已知class A 中有数据成员int a,如果定义了A 的两个对象A1、A2,它们各自的数据成员a 的值可以不同吗?解:可以,类的每一个对象都有自己的数据成员。4-6 什么叫做拷贝构造函数?拷贝构造函数何时被调用?解:拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用,其作用是使用一个已经存在的对象,去初始化一个新的同类的对象。在以下三种情况下会被调用:在当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象,调用函数进行形参和实参结合时;如果函数的返回值是类对象,函数调用完成返回时;4-7 拷贝构造函数与赋值运算符(=)有何不同?解:赋值运算符(=)作用于一个已存在的对象;而拷贝构造函数会创建一个新的对象。4-8 定义一个Dog 类,包含的age、weight 等属性,以及对这些属性操作的方法。实现并测试这个类。解:源程序:#includeusing namespace std;class Dogpublic:Dog(int A=0,int W=0);Dog();void setAge(int newA)age=newA;void setWeight(int newW)weight=newW;int showAge()return age;int showWeight()return weight;private:int age;int weight;Dog:Dog(int A,int W)age=A;weight=W;void main()Dog mydog(5,16);mydog.showAge();mydog.showWeight();coutmydogs age is mydog.showAge()endl;coutmydogs weight is mydog.showWeight()endl;mydog.setAge(8);mydog.setWeight(20);coutnow mydogs age is mydog.showAge()endl;coutmydogs weight is mydog.showWeight()endl;4-9 设计并测试一个名为Rectangle 的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。解:源程序:#includeusing namespace std;class point public:point(int xx=0,int yy=0)x=xx;y=yy;int getx()return x;int gety()return y;private:int x,y;class Rectangle public:Rectangle(point xp1,point xp2);int getarea()return area;private:point p1;point p2;int area;Rectangle:Rectangle(point xp1,point xp2)p1=xp1;p2=xp2;int height=p2.gety()-p1.gety();int width=p2.getx()-p1.getx();area=height*width;int main()point a(1,1),b(4,5);Rectangle myrectangle(a,b);coutmyrectangles area is: myrectangle.getarea()endl;return 0;4-10 设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中出生日期定义为一个日期类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员函数、聚集。解:#include #include using namespace std; class Date /日期类 private: int year; int month; int day; public: Date() /默认构造 Date(int y,int m,int d) /带参构造 year=y; month=m; day=d; void set() /设置数据函数 cinyearmonthday; void display() /显示函数 coutyear年month月day日; ; class Person /人员类 private: int num; char sex; Date birthday; char ID18; public: Person() /默认构造 Person(int n,int y,int m,int d,char id18,char s=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); void input() /输入函数 cout录入数据:endl; coutnum; coutsex; cout生日:; birthday.set(); coutID; ID18=0; coutendl; void output() /输出函数 cout编号:numendl; cout性别:sexendl; cout生日:; birthday.display(); coutendl; cout身份证号:IDendl; Person() /析构函数 cout num号人员已经录入endl; ; int main() Person p1; p1.input(); p1.output(); return 0; 4-11 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积解:#includeusing namespace std;class Rectanglepublic:Rectangle(float len,float wid)length=len;width=wid;Rectangle();float getlen()return length;float getwid()return width;float getarea();private:float length;float width;float Rectangle:getarea()return length*width;void main()float length, width;cout length;cout width;Rectangle r(length, width);cout 长为 length 宽为 width 的矩形的面积为: r.getarea () endl;4-12 定义一个数据类型 datatype 类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。解:#include class datatypeenumcharacter,integer,floating_pointvartype;unionchar c;int i;float f;public:datatype(char ch)vartype = character;c = ch;datatype(int ii)vartype = integer;i = ii;datatype(float ff)vartype = floating_point;f = ff;void print();void datatype:print() switch (vartype)case character:cout 字符型: c endl;break;case integer:cout 整型: i endl;break;case floating_point:cout 浮点型: f endl;break;void main() datatype A(c), B(12), C(1.44F);A.print();B.print();C.print();4-13 定义一个Circle 类,有数据成员半径Radius,成员函数GetArea(),计算圆的面积,构造一个Circle 的对象进行测试。解:#includeusing namespace std;const float PI=3.141593;class Circlepublic:Circle(float r)radius=r;float getarea();private:float radius;float Circle:getarea()return PI*radius*radius;void main()float a;coutplease input the radius:a;Circle mycircle(a);coutthe circles area is: mycircle.getarea()endl;4-14 定义一个tree 类,有成员ages,成员函数grow(int years)对ages 加上years,age()显示tree对象的ages 的值。#include class Tree int ages;public:Tree(int n=0);Tree();void grow(int years);void age();Tree:Tree(int n) ages = n;Tree:Tree()age();void Tree:grow(int years)ages += years;void Tree:age()cout 这棵树的年龄为 ages endl;void main()Tree t(12);t.age();t.grow(4);/* 2011-10-25provided ty Liu Hui 4-19 编写一个名为CPU的类,描述一个CPU的以下信息:时钟频率,最大不会超过3000MHz;字长,可以是32为或是64位;核数,可以是单核,双核或四核;是否支持超线程。 各信息要求使用位域来表示。通过输出sizeof(CPU)来观察该类所占的字节数。*/#includeusing namespace std;class CPU/定义一个CPU类private:/CPU类的私有成员double clockrate;/时钟频率,最大不超过3000MHzint wordsize;/字长,32或64 bitint heshu;/可单核,双核或四核bool m;/是否支持超线程public:CPU(double Newclockrate,int Newwordsize,int Newheshu,bool Newm) /构造函数clockrate=Newclockrate;wordsize=Newwordsize;heshu=Newheshu;m=Newm;void describe();/描述CPU信息的函数;void CPU:describe()/描述CPU信息的函数cout时钟频率为:clockrateMHzendl;cout字长为:wordsizeendl;cout核数为:heshuendl;if(m=true)cout支持超线程n;elsecout不支持超线程n;int main()CPU MyCPU(2500,32,4,true);/初始化一个CPU类的对象cMyCPU.describe();/描述这个对象ccoutCPU类在内存中所占的字节数为:;coutsizeof(CPU)endl;coutCPU对象在内存中所占的字节数为:;coutsizeof(MyCPU)endl;return 0;/* 2011-10-25provided ty Liu Hui4-20定义一个复数Complex,使得下面的代码能够工作。Complex c1(3,5);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论