多态性中的多类型输出

Multiple Type output in Polymorphism

当我想创建一个纯虚函数并分配给多个范围的输出格式(如 int、double 和 char)时,我遇到了问题。

我写了下面的代码,只有当我删除我的摘要时它才有效 class 这不是我想要的。

我的代码:

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

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

感谢您的回答...谢谢。

你不能简单地覆盖

void func(some_pointer_type ptr);

void func(some_other_pointer_type ptr);

参考文献也是如此。实际上,如果它们不匹配,则认为它们完全无关。

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

初学者:

template <typename T>
DynamicArray;