-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;
    }

我在代码块中编写我的代码。

我会很感激你的回答......谢谢。

4

1 回答 1

0

你不能简单地覆盖

void func(some_pointer_type ptr);

void func(some_other_pointer_type ptr);

参考也是如此。如果它们不匹配,它们实际上被认为是完全不相关的。

DynamicArrayDouble- 这个名字告诉我你应该研究模板,而不是为你需要的所有类型编写相同的代码。这就是 STL 的工作原理。您将完全避免运行时多态性。

对于初学者:

template <typename T>
DynamicArray;
于 2016-07-30T08:11:38.930 回答