重载>>基类的运算符

cod*_*ody 1 c++ inheritance

所以我有一个基类Animal,它有两个继承自它的类,它们是猫和狗.这两个课程都重新定义了一种纯粹的虚拟方法,这种方法只会为猫猫咪"喵喵叫",而对狗来说则是"低音".在我的主要功能中,我希望能够做到这样的事情:

int main (void) {
  Animal a;
  dog d;

  while (cin  >> a) //is this even possible? would it be cin >> d; instead?
   cout << a << endl;



  return(0);
}
Run Code Online (Sandbox Code Playgroud)

所以这应该让动物说出功能,但我怎么能这样做呢?另外,我很困惑,如果你不知道用户将要使用的动物类型,那么你如何确定使用哪种说话功能,你会使用模板类吗?

Nas*_*zta 5

在基类中执行类似的操作:

#include <istream>

using namespace std;

class Animal
{
  friend istream & operator >> ( istream &is, Animal &animal )
  {
    animal.readFromStream(is);
    return is;
  };
protected:
  virtual void readFromStream( istream &is ) = 0;
};
Run Code Online (Sandbox Code Playgroud)

并在派生中:

class Dog : public Animal
{
  protected:
    virtual void readFromStream( istream &is )
    {
      // read dog
    };
};
Run Code Online (Sandbox Code Playgroud)