且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

(一二五)第十一章复习题

更新时间:2022-06-04 03:23:49

1.使用成员函数为Stonewt类重载乘法运算符,该运算符将数据成员与double类型的值相乘。注意用英石和磅表示时,需要进位。也就是说,将10英石8磅乘以2等于21英石2磅。

答:

Stonewt Stonewt::operator*(double a)

{

Stonewt q;

q.stone=stone*a+pounds*a/14;

q.pounds=(pounds*a)%14;

}

 

 

2.友元函数和成员函数之间的区别是什么?

答:

友元函数:①函数原型需要使用friend;②调用的对象一般是非类对象;③在运算符重载函数里,有两个参数,并且往往一个是类对象、一个是非类对象;④在函数定义里,若不是内联函数,无需使用类作用域解析运算符在函数头中;

成员函数:①函数原型无需使用friend;②调用的对象是类对象;③在运算符重载函数里,类对象被隐式的传递给了函数;④若不是内联函数,那么在函数定义的函数头,需要使用作用域解析运算符。

成员函数是类定义的一部分,通过特定的对象来调用,可以直接调用对象的成员,而无需使用成员运算符(那个句号)。

友元函数不是类的组成部分,不是隐式的访问对象的成员,而是通过参数传递的对象来访问,并且需要使用成员运算符。

 

 

 

3.非成员函数必须是友元才能访问类成员吗?

答:

一般是,因为友元函数才能获得和成员函数一样的权限来访问类成员。

如果不使用友元函数,那么若要访问类成员,则只能访问类的公有成员,而无法访问私有成员。或者,类方法里有返回私有成员的值的公有成员函数。

 

 

 

4.使用友元函数为Stonewt类重载乘法运算符,该运算符将double值与Stone值相乘。

答:

函数原型,位于Stonewt类公有成员区域:friend Stonewt operator * (double a,const Stone& b);

函数定义:

Stonewt operator * (double a,const Stone& b)

{

Stonewt q;

q.Stone = b.Stone*a;

return q;

}

 

 

 

5.哪些运算符不能重载?

答:

1sizeof   sizeof运算符

2.  ←这是一个句号,成员运算符,比如结构名.结构内变量

3.*    ←句号和乘号,成员指针运算符(没见过)

4:: ←两个冒号,作用域解析运算符

5?: 条件运算符,比如: a>b?c:d

6typeid ←一个RTTI运算符(没见过)

7const_cast ←强制类型转换运算符(没见过这种用法)

8dynamic_cast ←强制类型转换运算符(没见过这种用法)

9reinterpret_cast ←强制类型转换运算符(没见过这种用法)

10static_cast ←强制类型转换运算符(没见过这种用法)

 

 

 

6.在重载运算符=()、[]和->时,有什么限制?

答:

只能通过类成员函数来进行重载(but,我没试过这个)。

 

 

 

7.Vector类定义一个转换函数,将Vector类转换为一个double类型的值,后者表示矢量的长度。

答:

以下这个函数直接放在public区域成为内联函数。

operator double()

{

return mag;

}