0

純粋な仮想メソッドinsertData(InputData * input)を持つ「アルゴリズム」と呼ばれるインターフェースを定義しようとしています。

インターフェイスの実装は「Algorithm1」と呼ばれ、「InputData」クラスの子である「SpecificData」をパラメータとして使用するメソッド「insertData」を実装したいと考えています。

型キャストなしで可能ですか?

明らかに、このコードでは、コンパイラから、仮想関数「insertData」が「Algorithm1」内で純粋であるというエラーが表示されます。

class Algorithm{
public:
    virtual ~Algorithm();
    virtual void insertData(InputData* input) = 0;
};

class Algorithm1 : public Algorithm{
public:    
    Algorithm1();
    virtual ~Algorithm1();

    void insertData(SpecificData* input){ 
    input.getID(); 
    input.getAdditionalNumbers;
    /*Process input information etc.*/ };
};

class InputData{
public: 
    void setID(int id){ this->id = id; }
    int getID(){ return id;};
private:
    int id;
};

class SpecifiData : public InputData{
public:
    list<int> getAdditionalNumbers(){/*Return various Numbers*/};
private:
    list<int> extraInfo;
};

void main(){
    SpecificData* data = new SpecificData();
    Algorithm* alg = new Algorithm1();
    alg->insertData(data);
}
4

3 に答える 3

0

これはデザインパターン用語の「ファクトリーメソッド」の典型だと思います。

 class Algorithm
    {
        public:
            virtual ~Algorithm();
            virtual void insertData(InputData* input) = 0;
    };
    class InputData
    {
        public: 
            void setID(int id){ this->id = id; }
            int getID(){ return id;};
            virtual list<int> getAdditionalNumbers() = 0;
        private:
            int id;
    };
    class Algorithm1 : public Algorithm
    {
        public:    
            Algorithm1();
            virtual ~Algorithm1();
            void insertData(InputData* input){ 
            input.getID(); 
            input.getAdditionalNumbers;
            /*Process input information etc.*/ };
    };
    class SpecifiData : public InputData
    {
        public:
            // implementation
            virtual list<int> getAdditionalNumbers(){/*Return various Numbers*/};
        private:
            list<int> extraInfo;
    };

    void main()
    {
            InputData* data = new SpecificData();
            Algorithm* alg = new Algorithm1();
            alg->insertData(data);
    }
于 2013-06-10T13:01:16.970 に答える