C 继承访问受保护的数据成员
C++ inheritance accessing protected data members
类的孩子可以访问派生类的对象的数据成员吗?
例如,我有此代码。
class word
{
protected:
char * a_word;
word * next;
};
class texting : public word
{
public:
word * checkPhrase(char * token, word * curr);
};
word * texting::checkPhrase(char * token, word * curr)
{
if (curr)
{
if (strcmp(token, a_word) == 0)
return curr;
else
return checkPhrase(token, curr->next);
}
else
return NULL;
}
我希望它能够编译和工作正常,但是当我尝试编译时,它告诉我word * next
是一个受保护的变量,我无法访问它,指的是该行
return checkPhrase(token, curr->next);
班级的孩子可以访问一个对象的数据成员 派生类?
是的,但是它自己的成员,而不是其他对象成员。您要访问的是对象的受保护成员作为参数传递的成员,并且该对象来自基类,而不是该对象(即checkPhrase
方法(可以从基类中访问其自己的成员,如果它们是公共的类别或受保护,而不是基类另一个对象的受保护或私人成员,即使此对象来自该对象的基类。
作为一个例子:
word * texting::checkPhrase(char * token, word * curr)
{
// this object
this->next = nullptr; // this is valid
next = nullptr; // this too
// curr object
curr->next = nulltr; // we are talking about an object of a different class and the variable has protected access.
}
您不能做到这一点。您只能访问自己班级对象的受保护成员。这是基类的对象,因此无法访问。
这里最简单的解决方案是在word
类中添加公共Getter函数:
public:
word* get_next() const
{ return next; }
并使用它:
return checkPhrase(token, curr->get_next());
另外,您应该在word
私有中使当前受保护的成员。受保护的成员变量几乎从来都不是一个好主意。受保护的函数成员很好,但受保护的成员变量通常不是。
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 从模板化父类中的派生内部类访问受保护的成员变量
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 无法访问派生类函数内的基类的受保护数据成员
- Clang 无法识别受保护的数据成员
- C 继承访问受保护的数据成员
- 尝试访问基类的受保护数据成员时出现编译错误
- 在子类函数中访问超类友元的受保护数据成员
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?
- 模板化转换构造函数无法访问受保护的数据成员
- 受保护数据成员的替代方案,具体案例研究
- 从派生类构造函数初始化受保护的数据成员
- 访问另一个类的受保护数据成员