这是2个班级
class B
{
private:
int x;
public:
friend std::istream& operator>>(std::istream& in, B& obj)
{
in >> obj.x;
return in;
}
};
class D: public B
{
private:
int y;
public:
friend std::istream& operator>>(std::istream& in, D& obj)
{
//?
}
};
有没有办法可以重载D类中的>>
运算符,以便它能够访问B中的元素x?
答案 0 :(得分:1)
有什么方法可以覆盖>> D类中的运算符,以便他能够访问B中的元素x?
不要将x
设为私有。
通过将其设为私有,您明确表示对class B
及其朋友的访问权限仅限于protected
。从你的问题来看,似乎你不希望这样。
如果是obj.x
,则可以{{1}}访问它。
答案 1 :(得分:1)
根据您的目的,您也可以这样做:
class B
{
private:
int x;
public:
friend std::istream& operator>>(std::istream& in, B& obj)
{
in >> obj.x;
return in;
}
};
class D: public B
{
private:
int y;
public:
friend std::istream& operator>>(std::istream& in, D& obj)
{
B* cast = static_cast<B*>(&D); //create pointer to base class
in >> *B; //this calls the operator>> function of the base class
}
};
尽管可能还有其他理由让x
受到保护而不是私有。
答案 2 :(得分:0)
x需要受到保护。否则无法直接从D.
访问class B
{
protected:
int x;
然后你可以做
class D: public B
{
private:
int y;
public:
friend std::istream& operator>>(std::istream& in, D& obj)
{
in >> obj.x;
return in;
}
};