面向对象程序设计课后习题答案

发布时间 : 星期三 文章面向对象程序设计课后习题答案更新完毕开始阅读

for(i=0;i

temp.var[i][j]=Y.var[i][j]-X.var[i][j]; return temp; }

void main() { array X,Y,Z; Y.get_array();

cout<<\ X.display();

cout<<\ Y.display(); Z=X+Y;

cout<<\ Z.display(); Z=X-Y;

cout<<\ Z.display(); }

[7_10]为Date类重载“+”运算符,实现在某一日期上(月日年)加一个天数 #include class Date { public: Date()

{ }

Date(int m,int d,int y) { month=m; day=d; year=y; }

void print()

{ cout<

int month,day,year; };

static int days[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},\\ {31,29,31,30,31,30,31,31,30,31,30,31}}; int isleap(int year)

{ if((year%4==0&&year0!=0)||(year@0==0)) return 1; else

return 0; }

Date Date::operator +(int n) { int leap,y; leap=0;

leap=isleap(this->year); n+=this->day;

while(n>days[leap][this->month-1]) { n-=days[leap][this->month-1]; if(++(this->month)==13) { this-&g ; month=1; (this->year)++;

leap=isleap(this->year); } }

this->day=n; return *this; }

void main()

{ Date d1(2,15,2000),d2; d1.print(); d2=d1+95; d2.print(); }

第八章:模板

[8_1]为什么使用摸板?函数摸板声明的一般形式是什么?

摸板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码重用。使用摸板可以大幅度地提高程序设计的效率。函数摸板的一般说明形式如下:

template 返回类型 函数名(摸板形参表) {

函数体 }

其中,template是一个声明摸板的关键字,它表示声明一个摸板。类型参数前需要加关键字class(或typename).

[8_2]什么是摸板实参和摸板函数?

将函数摸板中实例化的参数称为摸板实参,用摸板实参实例化的函数称为摸板函数。 [8_3]为什么使用类摸板,类摸板和摸板类之间的关系是什么? 类摸板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数或返回值能取任意数据类型。

类摸板不是代表一个具体的、实际的类,而是代表着一类类。摸板类是类摸板对某一特定类型的实例,表示某一具体的类。

[8_4]函数模板与同名的非模板函数重载时,调用的顺序是怎样的? (1)寻找一个参数完全匹配的函数,如果找到了就调用它。

(2)寻找一个函数模板,将其实例化,产生一个匹配的模板函数,若找到了,就调用它。 (3)若(1)和(2)都失败了,再试一试低一级的对函数的重载方法,例如通过类型转换可产生参数匹配等,若找到了,就调用它。 若(1)(2)(3)均未找到匹配的函数,则是一个错误的调用。如果在第(1)步有多于一个的选择,那么这个调用是意义不明确的,是一个错误调用。 [8_5] D 说明:实例化的摸板实参之间必须保持一致的类型 [8_6] A

[8_7] 运行结果:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,i out of range

说明:Holder类的大小是20,所以输出下标为21的元素会输出i out of range [8_8] 运行结果为:10 0.23 X This is a test

说明:程序声明了两种类型的对象。ob1的两个参数分别为整形与双精度型,ob2的两个参数分别为字符型与字符串型。

[8_9] 解:主函数中语句”Stack aSt(5);”是错误的,因为首先要将模板实例化,才能由模板生成对象。应该将此语句改为”StackaSt(5);” [8_10]解:#include template

Type min(Type a,Type b,Type c) { a=(a

[8_11]解:执行语句:

cout<

时出现错误。出错的原因是,函模板中的参数类型只有到该函数真正被调用时才能决定。在调用时,编译器将按最先遇到的实参的类型隐含地生成一个模板函数,用它对所有模板进行一致性检查。例如对语句:max(f,i);

编译器将先按变量f将Type解释为double类型,此后出现的模板实参i不能解释为double类型时,便发生错误,在此没有隐含的类型转换的功能。 如果想让运行结果为:10.56 10.56 主程序应修改为: void main() { int i=10; double f=10.56; cout<

cout<

[8_12]程序实现如下: #include template

Type max(Type *Array,int size) { int i,j=0;

for(i=1;i

if(Array[i]>Array[j]) { j=i; } return Array[j]; }

void main()

{ int intArray[]={11,12,13,14,7,8,9};

double dArray[]={11.2,12.3,13.2,14.5,14.8,8.7,9.3}; cout<

[8_13]程序实现如下: #include template

void sort(Type *Array,int size) { int i,j;

for(i=0;i

for(j=0;j

if(Array[j]>Array[j+1]) { Type temp=Array[j]; Array[j]=Array[j+1]; Array[j+1]=temp; } }

void main()

{ int intArray[]={11,12,13,14,7,8,9}; int i;

sort(intArray,7); cout<

cout<

[8_14]程序实现如下: #include template class input { public:

input(char *s,X min,X max); private:

联系合同范文客服:xxxxx#qq.com(#替换为@)