除了非常少的几种特例外,用户几乎可以自定义所有的C++操作符。在每一个操作符出现的表达式里,都有一个相应的函数调用来计算该表达式的值,而这一函数又是根据操作符和操作数的类型来决定的。 对于某一操作符@,对应的操作符函数名称为: operator@。 函数所进行的操作是双操作数的(binary)还是单操作数的(unary)? 如果所进行的操作是双操作数的,是否支持操作对象出现在操作符任何一侧的情况?如果支持,则需要使用友元函数(friend)。 在编写双操作数操作符函数时,经常要使用关键字friend,这种情况下,一个双操作符只能用在两个操作数之间。如果不使用friend关键字,则只能在操作符的左侧使用类对象。 一般来说,类的全局函数不能访问该类的私有成员,但是friend的全局函数可以访问(操作符函数作为类的成员的情况下)。如果操作符函数在类之外定义,则不需要某个类才能调用,任何类都可调用。 赋值号(=)是一个特殊的操作符,如果没对它编写程序,编译器将提供一个隐含函数来实现它的功能。C++里有个普遍的规则,同种类型对象之间的赋值总是被支持的,它就是成员到成员的直接赋值。 在成员函数中,关键字this是一个指向当前对象的指针(这里所说的当前对象,是指主调函数通过该对象调用某一函数)。每次用户调用一个成员函数时,C++都把一个隐含的this指针传递给函数的参数。一个操作符函数是属于哪个操作数对象的,this指针就指向该对象,称当前对象。 引用操作(&)允许用户在对象之间传递数据(共享)而不必创建多余的拷贝,它也不必使用指针表达式。 类型转换函数。对于任何特定的类,类型转换函数处理向外的转换(转变为另外一个类型),而构造函数(本身具有类型转换功能)执行向内的转换(从其它类型转变为此类型)。类型转换函数定义:operator typename () ;如operator const char* () { return get();};。

评论