0

我对派生类有一个问题,该派生类的构造函数带有 istream 参数。

参考.cpp_

....
Reference::Reference(istream& p_is)
{...}
....

Livre.h_ _

class Livre : public Reference
    {

    private:
    void verifieInvariant() const;
    std::string m_editeur;
    std::string m_isbn;

    public:

    Livre(
        const std::string& p_cote,
        const std::string& p_theme,
        const std::string& p_titre,
        const std::string& p_auteurs,
        int p_anneeEdition,
        const util::Date& p_dateAcquisition,
        const std::string& p_editeur,
        const std::string& p_isbn);

    Livre(std::istream& p_is);
...

下载文件

....
Livre::Livre(std::istream& p_is)
{

    Reference(std::istream& p_is);
    string editeur ="";

    string isbn = "";
    string buffer = "";
    getline(p_is, buffer);
    getline(p_is, editeur);
    getline(p_is, isbn);

    m_editeur = editeur;
    m_isbn = isbn;  
}

好的,所以我的问题很简单。编译器不允许我istream为派生类 Livre 创建另一个构造函数。我的 Reference 类是一个抽象类,我需要在构造函数 Livre 中使用 Reference 的流调用构造函数来完成信息。我的另一个选择是写

Reference::Reference(std::istream& p_is)
{...}

进入我的 Livre.cpp。因此,如果有人可以向我解释一个更好的方法,我将不胜感激。我知道我有很多代码,但要解释这个问题并不容易。多谢你们。

4

1 回答 1

3

我不确定是否是问题所在,但我相信正确的方法是重写

Livre::Livre(std::istream& p_is)
{
    Reference(std::istream& p_is);
    /* ... */
}

作为

Livre::Livre(std::istream& p_is) : Reference(p_is);
{
    /* ... */
}
于 2013-04-05T00:29:18.277 回答