类的子级是否可以访问派生类的对象的数据成员?
例如,我有这段代码。
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);
答案 0 :(得分:0)
一个类的子进程可以访问该对象的数据成员 衍生类?
是的,但是它自己的成员,而不是其他对象成员。您正在访问的是作为参数传递的对象的受保护成员,并且此对象来自基类,而不是此对象的同一个类,即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.
}
答案 1 :(得分:0)
你做不到。您只能访问自己类的对象的受保护成员。这是基类的对象,因此无法访问。
这里最简单的解决方案是在word
类中添加一个公共getter函数:
public:
word* get_next() const
{ return next; }
并使用它:
return checkPhrase(token, curr->get_next());
此外,您应该将word
中当前受保护的成员设为私有。受保护的成员变量几乎不是一个好主意。受保护的函数成员很好,但受保护的成员变量通常不是。