2016-07-30 3 views
-2

순수 가상 함수를 만들고이 다중 범위의 출력 형식 (예 : int, double 및 char)에 할당하려는 경우 문제가 있습니다.다형성의 다중 유형 출력

나는 코드 아래에 썼다. 그리고 나는 그것이 내가 원하는 것이 아닌 추상 클래스를 제거 할 때에 만 작동한다.

내 코드 :

내가 DynamicArray 클래스의 주석 및 DynamicArrayDouble 내가 몇 가지 오류와 함께 얼굴을 상속

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; 
 
       } 
 
     };
. 그것은 주목해야한다, 처음에는 void *를 사용하여 Set 및 Get 메서드에 대한 두 번째 매개 변수를 사용하려고하지만 다시이 코드 스타일을 사용할 수없는 오류가 발생한다. 오류 : '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; 
 
    }

내가 codeblocks에 내 코드를 작성합니다.

감사합니다. 고맙습니다.

+1

_i 얼굴 일부 오류 _. 그리고 그 오류는 ..? 일반적으로 오류는 정확히 무엇이 잘못 되었습니까? 복사하여 붙여 넣기가 어려웠습니까? –

답변

0

당신은 단순히

void func(some_other_pointer_type ptr); 

void func(some_pointer_type ptr); 

을 재정의 할 수 없습니다와 같은 참조를 위해 간다. 실제로 일치하지 않으면 완전히 관련이없는 것으로 간주됩니다.

DynamicArrayDouble -이 이름은 템플릿을 살펴보고 필요한 모든 유형에 대해 동일한 코드를 작성하지 않아야 함을 나타냅니다. 이것이 STL의 작동 방식입니다. 런타임 다형성을 완전히 피할 수 있습니다. 우선 들어

:

template <typename T> 
DynamicArray;