2016-07-30 2 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 наследуют это я столкнуться с некоторой погрешностью. следует отметить, что в первый раз я пытаюсь использовать 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 лицо некоторые error_. И ошибка ...? Поскольку, как правило, ошибки указывают, что именно, что случилось, было ли трудно скопировать-вставить его? –

ответ

0

Вы не можете просто переопределить

void func(some_pointer_type ptr); 

с

void func(some_other_pointer_type ptr); 

и То же самое касается ссылок. Фактически они считаются совершенно не связанными, если они не совпадают.

DynamicArrayDouble - это имя говорит мне, что вы должны заглядывать в шаблоны и не писать один и тот же код для всех типов, которые вам понадобятся. Вот как работает STL. Вы полностью избегаете полиморфизма во время выполнения.

Для начала:

template <typename T> 
DynamicArray; 
Смежные вопросы