当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

C++箴言:拷贝一个对象的所有组成部分

    在设计良好的面向对象系统中,为了压缩其对象内部的空间,仅留两个函数用于对象的拷贝:一般称为拷贝构造函数(copy constructor)和拷贝赋值运算符(copy assignment operator)。我们将它们统称为拷贝函数(copying functions)。如果需要,编译器会生成拷贝函数,而且阐明了编译器生成的版本正象你所期望的:它们拷贝被拷贝对象的全部数据。

  当你声明了你自己的拷贝函数,你就是在告诉编译器你不喜欢缺省实现中的某些东西。编译器对此好像怒发冲冠,而且它们会用一种古怪的方式报复:当你的实现存在一些几乎可以确定错误时,它偏偏不告诉你。

  考虑一个象征消费者(customers)的类,这里的拷贝函数是手写的,以便将对它们的调用记入日志:

 void logCall(const std::string& funcName); // make a log entry

class Customer {
  public:
   ...
   Customer(const Customer& rhs);
   Customer& operator=(const Customer& rhs);
   ...

  private:
   std::string name;
};
Customer::Customer(const Customer& rhs)
: name(rhs.name) // copy rhs’s data
{
  logCall("Customer copy constructor");
}

Customer& Customer::operator=(const Customer& rhs)
{
  logCall("Customer copy assignment operator");
  name = rhs.name; // copy rhs’s data
  return *this; // see Item 10
}

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接