条款12:复制对象时勿忘其每一个成分
2009-10-23 17:51
381 查看
当我们编写一个copying函数,请确保(1)复制所有local成员变量,(2)调用所有base class内的适当的copying函数
下面我们来看一个例子怎样来具体实现子类的copying函数
void logCall(const string &funcNmae)
{
cout << funcNmae << endl;
}
class Customer
{
public:
Customer(const string &strname) : name(strname)
{
}
Customer(const Customer &rhs);
Customer& operator=(const Customer &rhs);
private:
string name;
};
Customer::Customer(const Customer &rhs) : name(rhs.name)
{
logCall("Customer copy constructor");
}
Customer& Customer::operator=(const Customer &rhs)
{
logCall("Customer copy assignment operator");
name = rhs.name;
return *this;
}
class PriorityCustomer : public Customer
{
public:
PriorityCustomer( int value, string strname ) : Customer(strname) , priority(value)
{
}
PriorityCustomer(const PriorityCustomer &rhs);
PriorityCustomer& operator=(const PriorityCustomer &rhs);
private:
int priority;
};
PriorityCustomer::PriorityCustomer(const PriorityCustomer &rhs)
: Customer(rhs) , priority(rhs.priority)//调用base class的copy构造函数对base class 成员变量进行赋值
{
logCall("priorityCustomer copy constructor");
}
PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer &rhs)
{
logCall("PriorityCustomer copy assignment operator");
Customer::operator=(rhs); //对base class成分进行赋值动作
priority = rhs.priority;
return *this;
}
下面我们来看一个例子怎样来具体实现子类的copying函数
void logCall(const string &funcNmae)
{
cout << funcNmae << endl;
}
class Customer
{
public:
Customer(const string &strname) : name(strname)
{
}
Customer(const Customer &rhs);
Customer& operator=(const Customer &rhs);
private:
string name;
};
Customer::Customer(const Customer &rhs) : name(rhs.name)
{
logCall("Customer copy constructor");
}
Customer& Customer::operator=(const Customer &rhs)
{
logCall("Customer copy assignment operator");
name = rhs.name;
return *this;
}
class PriorityCustomer : public Customer
{
public:
PriorityCustomer( int value, string strname ) : Customer(strname) , priority(value)
{
}
PriorityCustomer(const PriorityCustomer &rhs);
PriorityCustomer& operator=(const PriorityCustomer &rhs);
private:
int priority;
};
PriorityCustomer::PriorityCustomer(const PriorityCustomer &rhs)
: Customer(rhs) , priority(rhs.priority)//调用base class的copy构造函数对base class 成员变量进行赋值
{
logCall("priorityCustomer copy constructor");
}
PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer &rhs)
{
logCall("PriorityCustomer copy assignment operator");
Customer::operator=(rhs); //对base class成分进行赋值动作
priority = rhs.priority;
return *this;
}
相关文章推荐
- effective C++ 条款 12:复制对象时勿忘其每一个成分
- 【effective c++】 条款12:复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分(Copy all parts of an object.)
- Effective C++ 条款12:复制对象时勿忘其每一个成分
- Effective C++ -----条款12: 复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分
- Effective C++ 条款12:复制对象时勿忘其每一个成分 学习笔记
- 条款12:复制对象时勿忘其每一个成分
- Effective C++ 条款12:复制对象时勿忘其每一个成分
- 条款12 复制对象勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分
- effective c++条款12(复制对象时勿忘其每一个成分)
- 条款12:复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分(Copy all parts of an object)
- Effective C++_笔记_条款12_复制对象时勿忘其每一个成分
- 条款12:复制对象时勿忘其每一个成分
- 《Effect C++》学习------条款12:复制对象时勿忘其每一个成分