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

あなたがしようとしているように見えることに基づいて、これを行うこともできます:

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 に答える
1

クラス D の >> 演算子をカバーロードして、B の要素 x にアクセスできるようにする方法はありますか?

xプライベートにしないでください。

class Bプライベートにすることで、アクセスがとその友人に制限されていることを明示的に示しています。そして、あなたの質問から、あなたはそれを望まないようです。

代わりにprotected、としてアクセスできますobj.x

于 2013-04-02T20:45:12.773 に答える