为我自己的类重载输出流

Overloading output stream for my own class

本文关键字:重载 输出流 自己的 我自己      更新时间:2023-10-16

我有一个基类Animal,类Cat和Dog派生自该基类。

我试图重载输出流,这样我就可以做这样的事情:

Animal *a = (animal *) 0;
while(read_animal(cin, a) && a)       // a has been assigned a derived class
    cout << *a << 'n';

下面是我如何超载的:

 ostream& operator<<(ostream &a, const animal* animal) {
     return a << animal->describe() << endl;
}

但我得到了一个错误:

错误20错误C2679:二进制'<lt;':找不到接受"animal"类型右侧操作数的运算符(或没有可接受的转换)

想法?

尝试

cout << a << 'n';

由于您的过载需要const animal* animal

或者,将您的函数签名更改为:

 ostream& operator<<(ostream &a, const Animal& animal) {
     return a << animal.describe() << endl;
}

您的过载需要const animal*,但您提供的是*a,即animal,而不是animal*。所以你可以试试:

cout << a << 'n';