2016-07-30 5 views
-2

純粋な仮想関数を作成し、この複数の範囲の出力フォーマット(int、double、charなど)に割り当てるときに問題があります。多型の複数型出力

私は以下のコードを書いています。私が抽象クラスを削除したときにのみ動作します。これは、私が望むものではありません。

私のコード:

enter code here 

//class DynamicArray 
 
      //{ 
 
      // public: 
 
      //  virtual void GetData(unsigned int s, int& d) = 0; 
 
      //  virtual void SetData(unsigned int s, int& d) = 0; 
 
      //}; 
 
     
 
     
 
     
 
     class DynamicArrayDouble//: public DynamicArray 
 
     { 
 
      private: 
 
       unsigned int m_Length; 
 
       double* arr; 
 
      public: 
 
       DynamicArrayDouble(unsigned int l) 
 
       { 
 
        m_Length = l; 
 
        arr = new double[m_Length]; 
 
       } 
 
       void SetParam(unsigned int l) 
 
       { 
 
        m_Length = l; 
 
        arr = new double[m_Length]; 
 
       } 
 
       void GetData(unsigned int s, double& d) 
 
       { 
 
        d = arr[s]; 
 
       } 
 
       void SetData(unsigned int s, double& d) 
 
       { 
 
        arr[s] = d; 
 
       } 
 
     };

私はDynamicArrayクラスのコメントを解除し、DynamicArrayDoubleは、私はいくつかのエラーで直面それを継承します。最初に、SetとGetメソッドの2番目のパラメータにvoid *を使用しようとしましたが、このコードスタイルをこのように使用できないエラーが再び発生します。 エラー:変数 'd1'を宣言できません抽象型でも 'DynamicArrayDouble'

と上記のエラーのコードは次のとおりです。

class DynamicArray 
 
    { 
 
     public: 
 
      virtual void GetData(unsigned int s, void* d) = 0; 
 
      virtual void SetData(unsigned int s, void* d) = 0; 
 
    }; 
 
    
 
    class DynamicArrayDouble: public DynamicArray 
 
    { 
 
     private: 
 
      unsigned int m_Length; 
 
      double* arr; 
 
     public: 
 
      DynamicArrayDouble(unsigned int l) 
 
      { 
 
       m_Length = l; 
 
       arr = new double[m_Length]; 
 
      } 
 
      void SetParam(unsigned int l) 
 
      { 
 
       m_Length = l; 
 
       arr = new double[m_Length]; 
 
      } 
 
     void GetData(unsigned int s, double* d) 
 
     { 
 
      *d = arr[s]; 
 
     } 
 
     void SetData(unsigned int s, double* d) 
 
     { 
 
      arr[s] = *d; 
 
     } 
 
    }; 
 
    
 
    int main() 
 
    { 
 
     DynamicArrayDouble d1(5); 
 
     double x=0; 
 
    
 
     for(unsigned int i=0;i<5;i++) 
 
     { 
 
      x = ((i+1.0)/2); 
 
      d1.SetData(i,&x); 
 
     } 
 
    
 
     for(unsigned int i=0;i<5;i++) 
 
     { 
 
      d1.GetData(i,&x); 
 
      cout << "Data " << i+1 << " is = " << x << endl; 
 
     } 
 
    
 
     return 0; 
 
    }

私はコードブロックでの私のコードを記述します。

ありがとうございます...ありがとうございます。

+1

_I面一部ERROR_。そして、エラーは..?通常、エラーは正確に何が間違っているのかを示しているので、コピーして貼り付けるのは難しいですか? –

答えて

0

あなたは、単に参照のために行く

void func(some_other_pointer_type ptr); 

と同じで

void func(some_pointer_type ptr); 

を上書きすることはできません。実際には一致しない場合、完全に無関係であるとみなされます。

DynamicArrayDouble - この名前は、テンプレートを調べて、必要なすべてのタイプに同じコードを書き込まないように指示します。これがSTLの仕組みです。ランタイムポリモーフィズムは完全に回避されます。手始めに

template <typename T> 
DynamicArray;