面向对象程序设计课后习题答案 联系客服

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

{ japan=j; } void set_e(float e) { europe=e; }

virtual void print_exchange(float a)=0;//加浮点参数 a protected:

float japan,europe; };

class ja:public currency { public:

void print_exchange(float a) //加浮点参数a

{ cout<<\ //变a/japan cout<

class eur:public currency { public:

void print_exchange(float a)//

{ cout<<\ eur exchange $: \ //变a*europr cout<

{ currency *ptr[2]; ja j1; eur e1; ptr[0]=&j1;

ptr[0]->set_j(116.30);

ptr[0]->print_exchange(100000);//放任意数 ptr[1]=&e1;

ptr[1]->set_e(1.1634);

ptr[1]->print_exchange(1000);//放任意数 return 0; }

第七章:运算符重载

习题:[7_1]简述运算符重载的规则

(1)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成的。一般来讲,重载的功能应当与原有的功能相类似。

(2)C++语言中只能重载原先已有定义的运算符。

(3)不是所有的运算符都能重载,它们是:类属关系运算符“.”、成员指针运算符“*”、作用域分辨符“::”、sizeof运算符和三目运算符“?:”如(x>y)?x:y (4)运算符重载不能改变运算符的操作个数 (5)运算符重载不能改变运算符原有的优先级 (6)运算符重载不能改变运算符原有的结合性

(7)运算符重载不能改变运算符对预定义类型数据的操作方式 [7_2]友元运算符函数和成员运算符函数有什么不同?

(1)运算符函数可以定义为它将要操作的类的成员,称为成员运算符函数;定义为类的友元函数,称为友元运算符函数。对双目而言,成员运算符函数带有一个参数,而友元运算符函数带有2个参数;对单目运算符而言,成员运算符函数不带参数,而友元运算符函数带一个参数。

(2)双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但当双目运算符的左操作数是一个基本数据类型,而右操作数是一个类类型时必须使用友元运算符函数。 (3)成员运算符函数和友元运算符函数可以用习惯方式调用,也可以用它们专用的方式调用

[7_3]答:D 说明:C++语言允许在重载运算符时改变运算符的原来的功能。例如将++符号重载时,可以定义为--的功能。但是,不提倡这样做。重载的功能应当与原有的功能类似。 [7_4]答:A 说明:C++规定不能用友元函数重载“=”、“[]”和“->”

[7_5]答:运行结果为:7 6 说明:重载++运算符时使用的友元函数无法引用this指针,函数通过传值的方法传递参数,函数体内对数据成员的改动无法传到函数体外。所以,(++I)以后,I.xi无任何改动。

[7_6]答:结果为5 7 说明:本题是重载运算符(),用()模拟数组运算符[]。 [7_7]答:++dl的调用是非法的,因为重载的是后缀“++”

[7_8]编一程序,用成员函数重载运算符“+”和“-”将2个二维数组相加和相减, 要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。 #include #include

const int row=2; const int col=3; class array { public: array()

{ int i,j,k=1; for(i=0;i

for(j=0;j

void get_array()//由键盘输入数组的值 { int i,j;

cout<<\ for(i=0;i

cin>>var[i][j]; }

void display()//显示数组的值 { int i,j;

for(i=0;i

{ for(j=0;j

cout<

array operator+(array X)//将2个数组相加 { array temp; int i,j;

for(i=0;i

for(j=0;j

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

array operator-(array X)//将2个数组相减 { array temp; int i,j;

for(i=0;i

for(j=0;j

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

int var[row][col]; };

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_9]修改上题,用友元函数重载运算符“+”和“-”将2个二维数组相加和相减

#include #include

const int row=2; const int col=3; class array { public: array()

{ int i,j,k=1; for(i=0;i

for(j=0;j

void get_array()//由键盘输入数组的值 { int i,j;

cout<<\ for(i=0;i

for(j=0;j

cin>>var[i][j]; }

void display()//显示数组的值 { int i,j;

for(i=0;i

{ for(j=0;j

cout<

friend array operator+(array X,array Y);//将2个数组相加 friend array operator-(array X,array Y);//将2个数组相减 private:

int var[row][col]; };

array operator+(array X,array Y)//将2个数组相加 { array temp; int i,j;

for(i=0;i

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

array operator-(array X,array Y)//将2个数组相减 { array temp; int i,j;