在 C++ 中实现复制控制时如何处理基类的私有成员?

鸡块

给定一个派生自一个教师类的教师类,我将如何处理教师对象的名称,该对象在教师中定义为私有成员,但在教师中定义为私有成员,以进行复制控制?

// 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++-访问基类的受保护/私有成员

重写派生类C ++中基类私有成员的行为

C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

无法从C ++中的类内部访问私有成员?

如何启用朋友类的朋友功能直接在C ++中访问其私有成员

C ++如何在std :: for_each内部的类中访问私有成员

为什么 C++ 模板类可以访问其基类的私有成员?

使公共成员变量访问C ++中同一类的私有成员

如何修复Unreal和C ++中的“无法访问在类中声明的私有成员”错误

成为私有成员(c ++类)意味着什么?

访问派生类C ++的私有成员

C++ 中的类私有成员是否保证内存中的顺序?

如何获得通用函数指针作为C ++类的私有成员?

如何从Swift扩展访问Objective-C类的私有成员?

错误C2248:无法访问在类中声明的私有成员

读取文本文件并将数据存储在类的私有成员变量中-C ++

从文件 c++ 中读取类对象(私有成员变量)

如何在C中模拟C ++中的私有成员变量?

在 C# 中对记录进行相等检查时忽略私有成员变量

C ++:访问该类的私有成员

私有成员c++问题

在C ++中,类仅包含(默认情况下)私有成员有什么用?

抽象类可以在C ++ 11中具有构造函数和私有成员吗

没有私有成员的 C# 类成员验证

如果C ++头文件包含私有成员变量声明,如何将其视为类的“接口”?

错误C2248:无法访问在类中声明的私有成员,编译器行为异常

错误C2248:“ CvSVM :: CvSVM”:无法访问在类“ CvSVM”中声明的私有成员

错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员