所以我有一个基类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)
所以这应该让动物说出功能,但我怎么能这样做呢?另外,我很困惑,如果你不知道用户将要使用的动物类型,那么你如何确定使用哪种说话功能,你会使用模板类吗?
在基类中执行类似的操作:
#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)