定义和使用类的许多重要方面的总结

2023-12-20 00:32:54

11.7

总结

本章介绍了定义和使用类的许多重要方面,其中的一些内容可能较难理解,但随着实践经验的不断增
加,读者将逐渐掌握它们。
·般来说,访问私有类成员的惟一方法是使用类方法。C++使用友元函数来避开这种限制。要让函数
成为友元,需要在类声明中声明该函数,并在声明前加上关键字friend。
C++扩展了对操作符的重载,允许自定义特殊的操作符函数,这种函数描述了特定的操作符与类之间
的关系。操作符函数可以是类成员函数,也可以是友元函数(有一些操作符函数只能是类成员函数)。要调
用操作符函数,可以直接调用该函数,也可以以通常的句法使用被重载的操作符。对于操作符op,其操作
符函数的格式如下:
operatorop (argument-list)
argument-list 表示该操作符的操作数。如果操作符函数是类成员函数,则第一个操作数是调用对象,
它不在argument-list 中。例如,本章通过为Vector类定义 operator+()成员函数来重载加法。如果up、right

和result都是Vector对象,则可以使用下面的任何一条语句来调用矢量加法:
result = up.operator+ (right) :
result = up + right;
在第二条语句中,由于操作数up和right的类型都是Vector,因此C++将使用Vector的加法定义。
当操作符函数是成员函数时,则第一个操作数将是调用该函数的对象。例如,在前面的语句中,up对
象是调用函数的对象。定义操作符函数时,如果要使其第一个操作数不是类对象,则必须使用友元函数。
这样就可以将操作数按所需的顺序传递给函数了。
最常见的操作符重载任务之一是定义 << 操作符,使之可与cout一起使用,来显示对象的内容。要让
ostream 对象成为第一个操作数,需要将操作符函数定义为友元;要使重新定义的操作符能与其自身拼接,
需要将返回类型声明为ostream&。下面的通用格式能够满足这种要求:
ostream & operator << (ostream & os, const c name & obj)

os << ...: // display object contents
return os:

不过,如果类包含这样的方法,它返回需要显示的数据成员的值,则可以使用这些方法,无需在
operator << ()中直接访问这些成员。在这种情况下,函数不必(也不应当)是友元。
C++允许指定在类和基本类型之间进行转换的方式。首先,任何接受惟一一个参数的构造函数都可被
用作转换函数,将类型与该参数相同的值转换为类。如果将类型与该参数相同的值赋给对象,则C++将自
动调用该构造函数。例如,假设有一个String类,它包含一个将char*值作为其惟一参数的构造函数,那
么如果bean是String对象,则可以使用下面的语句:
bean = "pinto": // converts type char * to type String
不过,如果在该构造函数的声明前加上了关键字explicit,则该构造函数将只能用于显式转换:
bean = String ("pinto"): // converts type char * to type String explicitly
要将类对象转换为其他类型,必须定义转换函数,指出如何进行这种转换。转换函数必须是成员函数。
将类对象转换为typeName类型的转换函数的原型如下:
operator typeName () :
注意,转换函数没有返回类型、没有参数,但必须返回转换后的值(虽然没有声明返回类型)。例如,
下面是将Vector转换为double类型的函数:
Vector: :operator double ()

return a double value:

经验表明,最好不要依赖于这种隐式转换函数。
读者可能已经注意到了,与简单的C风格结构相比,使用类时,必须更谨慎、更小心,但作为补偿,
它们为我们完成的工作也更多。

}

文章来源:https://blog.csdn.net/Popcorn_zyh/article/details/135084476
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。