面向对象程序设计课后答案(完整版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象程序设计课后答案(完整版)
第二章2-4
#include
using namespace std;
Add(int a,int b);
int main()
{
int x,y,sum;
cout>x>>y;
sum = add(x,y);
cout >*p;
p++;
}
p = p-20;
for( i=0;i0) countp++;
if(*p>age ;
try
{
checkagescore(name,age);
}
catch( string)
{
cout<<"exception :name is exit"<<endl;
continue;
}
catch(int)
{
cout<<"exception :age is not proper"<<endl;
continue;
}
cout<<"name:"<<name<<" age :"< }
return 0;
}
第三章
3-1
(1)A (2)C (3)B (4)C (5)C
(6)B (7)B (8)C (9)C
3-7
(1)
main()函数中
p1.age = 30;语句是错误的。
age 是类的私有成员(2)
构造函数应当给常数据成员和引用成员初始化,将构造
函数改为:A(int a1,int b1):a(a1),b(b1){}
或
A(int a1 ):a(a1),b(a){}再将main中的A a(1,2); 改为A a(1);
(3)
(1)在Test 类中添加语句:
void print();
void Print(){
cout<<x<<"-"<<y<<"="<<x-y<<endl;
}
改为
void Test::Print(){
cout<<x<<"-"<<y<<"="<<x-y<<endl;
}
main函数中
Init(38,15);改为:
A.Init(38,15);
Print();改为:
A.Print();
3-8
(1)
Constructing A
Constructing B
Destructing B
Destructing A
(2)
double a,double b
point & p
p.x
3-9
class box
{
int len1,len2,len3;
public:
box(int l1,int l2,int l3){len1 = l1;len2 = l2; len3 = l3;} long volumn(){return len1*len2*len3;}
};
3-10
class Test{
int m1,m2;
public:
void Init(int a,int b){m1 = a;m2 = b;}
void Pring(){cout<<m1<<" "<<m2<<endl;}
};
3-11
略
3-12
}
第四章
4-6
(1)D (2)D (3)D (4)D (5)B
(6)D
4-7
(1)
static int count = 0;这样初始化静态成员值是不对的将其改为static int count;
在类外,main函数前加
int Sample::count = 0;
(2)
#include
//#include
using namespace std;
class Ctest
{
private:
int x; const int y1;
public:
const int y2;
Ctest(int i1,int i2):y1(i1),y2(i2) {
y1 =10;//y1 为常量不能赋值
x = y1;
}
int readme() const;
};
int Ctest::readme ()const
{
int i;
i = x;
x++; //常函数内不能改变成员值
return x;
}
int main()
{
Ctest c(2,8);
int i = c.y2;
c.y2 = i;//y2为常量,不能改值
i = c.y1;//y1私有,类外不能访问
return 0;
}
将出错语句全部注释
4-8
(1)
题中印刷错误,将class C构造函数改为: C()
{cout<<"constructor C:";}
运行结果为:
constructor A
constructor B
constructor C
(2)
40
(3)
3
4
3
4-9#include
#include
class Date
{
int year;
int month;
int day;
public:
Date(int y,int m,int d)
{
year=y;month=m;day=d;
}
void disp()
{
cout<<year<<" "<<month<<" "<<day<<endl;
}
friend int count_day(Date &d,int k);
friend int l(int year);
friend int h(Date &d1,Date &d2);
};
int count_day(Date &d,int k)
{
static int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,3 1},
{31,29,31,30,31,30,31,31,30,31,30,31}};
// 使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
int j,i,s;
if(l(d.year))
j=1;//闰年,取1
else j=0;//非闰年,取0
if(k)//K非0时
{
s=d.day;
for(i=1;i<d.month;i++)//d.month为输入的月份
s+=day_tab[j][i-1];
}
else//K为0时
{
s=day_tab[j][d.month]-d.day;
for(i=d.month+1; i<=12; i++)
s+=day_tab[j][i-1];
}
return s;//S为相差的天数
}
int l(int year)
{
if(year%4==0&&year%100!=0||year%400==0) // 是闰年
return 1;
else // 不是闰年
return 0;
}
int h(Date &d1,Date &d2)
{
int days,day1,day2,y;
if(d1.year<d2.year)//第一个日期年份小于第二个日期年份
{
days=count_day(d1,0);
for(y=d1.year+1;y<d2.year;y++)
if(l(y))//闰年。