给定一个派生自一个教师类的教师类,我将如何处理教师对象的名称,该对象在教师中定义为私有成员,但在教师中定义为私有成员,以进行复制控制?
// example code for the two classes
class Faculty{
public:
/* constructor
copy constructor
destructor
assignment operator
*/
string get_name() const{
return name;
private:
string name;
};
class Teacher : public Faculty{};
假设 Faculty 类具有正常工作的复制控制
// Copy constructor
Teacher(const Teacher& rhs) : Faculty(rhs){
name = rhs.name;
}
此行无法编译,因为它试图访问 Faculty 的私有成员。是否需要此行,或者副本的名称是否已由初始化列表 Faculty(rhs) 设置为 rhs.name?如果我直接在教师的私有字段中定义一个字符串名称,可以访问名称吗?
// Assignment operator
Teacher& operator=(const Teacher& rhs){
Faculty::operator=(rhs);
if(this != &rhs){
name = rhs.name; // same issue
}
return *this;
}
与复制控制相同的问题,这是需要的还是名称已被学院班级的分配操作员更改为 rhs.name?
是否需要此行,或者副本的名称是否已由初始化列表 Faculty(rhs) 设置为 rhs.name?
不,不需要该行(假设默认或正确实现的Faculty
复制构造函数)。构造函数将为您正确Faculty
分配或初始化name
。
如果我直接在教师的私有字段中定义一个字符串名称,可以访问名称吗?
是的,有点。但它将是一个完全独立的实例name
。你不想这样做。你只想name
定义一次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句