当前位置:嗨网首页>书籍在线阅读

09-比较成员函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

12.2.2 比较成员函数

在String类中,执行比较操作的方法有3个。如果按字母顺序(更准确地说,按照机器排序序列),第一个字符串在第二个字符串之前,则operator<()函数返回true。要实现字符串比较函数,最简单的方法是使用标准的strcmp()函数,如果依照字母顺序,第一个参数位于第二个参数之前,则该函数返回一个负值;如果两个字符串相同,则返回0;如果第一个参数位于第二个参数之后,则返回一个正值。因此,可以这样使用strcmp():

bool operator<(const String &st1, const String &st2)
{
    if (std::strcmp(st1.str, st2.str) < 0)
        return true;
    else
        return false;
}

因为内置的>运算符返回的是一个布尔值,所以可以将代码进一步简化为:

bool operator<(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) < 0);
}

同样,可以按照下面的方式来编写另外两个比较函数:

bool operator>(const String &st1, const String &st2)
{
    return st2 < st1;
}
bool operator==(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) == 0);
}

第一个定义利用了<运算符来表示>运算符,对于内联函数,这是一种很好的选择。

将比较函数作为友元,有助于将String对象与常规的C字符串进行比较。例如,假设answer是String对象,则下面的代码:

if ("love" == answer)

将被转换为:

if (operator==("love", answer))

然后,编译器将使用某个构造函数将代码转换为:

if (operator==(String("love"), answer))

这与原型是相匹配的。