1

这里有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?

4

3 回答 3

1

有什么方法可以覆盖 D 类中的 >> 运算符,以便他能够访问 B 中的元素 x?

不要x私信。

通过将其设为私有,您明确表示对它的访问仅限class B于其朋友。从您的问题来看,您似乎不希望那样。

如果是protected,您可以将其作为obj.x.

于 2013-04-02T20:45:12.773 回答
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保护而不是私有。

于 2013-04-02T20:49:31.923 回答
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;
    }
};
于 2013-04-02T21:04:07.030 回答