0

抽象クラスがある場合、それを「Vertebrate」と呼びましょう。それにはフィールドがあり、子クラスでオーバーライドされて呼び出されるstd::string name;純粋仮想メソッド があります。virtual void print(std::ostream&) const noexcept = 0;operator<<

ポリモーフィズムがどのように機能するか、およびoperator<<継承されたクラスに実装する方法がわかりました。

私が得られないもの:

私はこれを理解していません:operator<<仮想印刷機能を使用する、その抽象クラスでの実装方法。このコードが機能しないのはなぜですか? 私の抽象クラスにはoperator<<.

virtual void print(std::ostream&) const noexcept = 0;
std::ostream & operator<<(std::ostream & str, Member &obj)
{
    return obj.print(str);
}

それが抽象クラスのコードです。

4

1 に答える 1

2

の結果を返そうとしてprintいますがvoidoperator<<返す必要がありstd::ostreamます。

以下が機能するはずです。

class Vertebrate
{
    // ...
    virtual void print(std::ostream&) const noexcept = 0;
};

std::ostream& operator<<(std::ostream& stream, Vertebrate& obj)
{
    obj.print(stream);
    return stream;
}
于 2016-12-31T15:23:33.547 に答える