直接親ではない基底クラスからコンストラクタを継承する方法

Wordの最下位クラスの定義では、DictのコンストラクタであるDict(string
f)を継承できるようにしたいと考えていました。ただし、直接継承ではないため、直接行うことはできません。それはツリーに続き、最後の親はElementクラスです。

コンパイラに、Wordクラスがインストラクタ(Dict)から継承し、Wordテスト(
“test.txt”)を実行できるようにする方法を教えてください。メインでのインスタンス化?

#include 
#include 
#include 
#include 
#include 

using namespace std;

class Dict {
public:
    string line;
    int wordcount;
    string word;
    vector  words;

    Dict(string f) {//I want to let Word inherit this constructor
        ifstream in(f.c_str());
        if (in) {
            while(in >> word)
            {
                words.push_back(word);
            }
        }
        else
            cout << "ERROR couldn't open file" << endl;

        in.close();
    }
};

class Element : public Dict {
public:
    virtual void complete(const Dict &d) = 0;
    virtual void check(const Dict &d) = 0;
    virtual void show() const = 0;
};

class Word: public Element {
public:
    Word(string f) : Dict(f) { };//Not allowed (How to fix?)

    void complete(const Dict &d) { };
};
};

int main()
{
    //Word test("test.txt");
    return 0;
}
ベストアンサー

Element クラスは、問題の Dict
コンストラクタを呼び出す能力を公開する必要があります。

C ++ 98/03では、 Dict
コンストラクタを呼び出すだけの同じパラメータを持つコンストラクタを Element で定義し、
code>は Dict コンストラクタの代わりにその Element
コンストラクタを使用します。

C ++ 11では、コンストラクタの継承を使用して多くの型を節約できます起こり得るエラーを防止します。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です