2013-04-02 2 views
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?

+0

Чтобы быть более конкретным, сделать 'x' защищены;) – maditya

ответ

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 защищенные вместо частного в любом случае.

1

Есть ли способ покрыть оператор >> в классе D, чтобы он мог получить доступ к элементу x в B?

Не делать x частным.

Делая это частным, вы прямо заявляете, что доступ к нему ограничен class B и его друзьями. И из вашего вопроса, похоже, вы этого не хотите.

Если бы у вас был protected, вы можете получить к нему доступ как obj.x.

+0

Я боюсь, что это не будет работать, потому что 'operator >>' вот друг 'D', а не функция-член –

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; 
    } 
}; 
+0

' x' наследуется 'D' в том смысле, что' D' имеет член данных 'x'. Он просто недоступен. – juanchopanza

+0

исправлено. .... ... – 2013-04-02 21:13:24

Смежные вопросы