设为首页 加入收藏

TOP

effectiveC++(十七)(四)
2010-12-26 23:20:34 来源: 作者: 【 】 浏览:4349
Tags:effectiveC 十七
string c = "hello";

a和c具有相同值,所以它们被认为是完全相同的;b和它们都不同。如果把这个定

义用到string类中,赋值运算符看起来就象这样:

string& string::operator=(const string& rhs)
{
  if (strcmp(data, rhs.data) == 0) return *this;

  ...

}

值相等通常由operator==来检测,所以对于一个用值相等来检测对象身份的类c来

说,它的赋值运算符的一般形式是:

c& c::operator=(const c& rhs)
{
  // 检查对自己赋值的情况
  if (*this == rhs)            // 假设operator=存在
    return *this;

  ...

}

注意这个函数比较的是对象(通过operator=),而不是指针。用值相等来确定对

象身份和两个对象是否占用相同的内存没有关系;有关系的只是它们所表示的值。

另一个确定对象身份是否相同的方法是用内存地址。采用这个定义,两个对象当且

仅当它们具有相同的地址时才是相同的。这个定义在c++程序中运用更广泛,可能

是因为它很容易实现而且计算很快,而采用值相等的定义则不一定总具有这两个优

点。采用地址相等的定义,一个普通的赋值运算符看起来象这样:

c& c::operator=(const c& rhs)
{
  // 检查对自己赋值的情况
  if (this == &rhs) return *this;

  ...

}

它对很多程序都适用。

如果需要一个更复杂的机制来确定两个对象是否相同,这就要靠程序员自己来实现

。最普通的方法是实现一个返回某种对象标识符的成员函数:

class c {
public:
  objectid identity() const;    // 参见条款36

  ...

};

对于两个对象指针a和b,当且仅当 a->id

首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇effectiveC++(十八) 下一篇effectiveC++(十六)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: