多态中的多种类型输出

时间:2016-07-30 08:06:48

标签: c++ multipleoutputs

当我想创建一个纯虚函数并分配给多种输出格式(如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;
    }

我在代码块中编写代码。

我将非常感谢您的回答......谢谢。

1 个答案:

答案 0 :(得分:0)

您无法简单地覆盖

void func(some_pointer_type ptr);

void func(some_other_pointer_type ptr);

同样适用于参考文献。事实上,如果他们不匹配,那些被认为是完全不相关的。

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

首先:

template <typename T>
DynamicArray;