繁体   English   中英

如何创建一个类对象数组,其构造函数需要很少的参数?

[英]How can I create an array of class objects whose constructor require few arguments?

我读过有关解决方案const A a[3] = { {0,0}, {1,1}, {2,2} },但在我的程序const中不能使用:

class Paper: public PaperQueue{  
  ...
  protected:
    typedef int (Utils::*funcPtr) (int, int); //I use external function there
    funcPtr p;                               
    Utils* fptr; 
  public:
    int pricefunc(){     
      addprice = (fptr->*p) (t,price);
    }

    Paper(int n, unsigned int pr):PaperQueue(n){         
       ...
       p=&Utils::commonpricefunc;    
    }
    void Put(int a){ 
       ...
    }
  ...
}    

class Bank{ 
  ...
  void Buy(Paper &p){
   (/*this function modifies many parameters in 'p'*/)
  ...
  }
  ...
}

int main(){
Bank B;    
int pn=5;
/* ? */ const Paper p[pn] = {{5,15},{5,15},{5,15},{5,15},{5,15}}; /* ? */
int paperloop=0;
...
p[paperloop].Put(p[paperloop].addprice);
B.Buy(p[paperloop]);
...

这给了我很多错误(使用pricefunc(),Put(),Buy(),...),或者只是“可变大小的对象'p'可能无法初始化”。 有没有办法让这个数组工作? (如果不将任何参数传递给构造函数,一切正常!)

您不能对类(非POD)使用初始化程序列表,因为这会绕过对构造函数的调用。 您必须通过以下方式将其更改为POD或使用std :: vector:

如果类是可复制的,就像它看起来那样,你可以创建一个std :: vector并用你想要的值填充它:

const vector<Paper> papers(5, Paper(5, 15));

如果要使用不同的值初始化它,可以使用初始化列表,但这仅在C ++ 11中受支持:

const vector<Paper> papers = {Paper(1, 1), Paper(2, 2)};

没有C ++ 11,你必须逐个添加元素,但是你不能使向量const:

vector<Paper> papers;
papers.push_back(Paper(1, 1));
papers.push_back(Paper(2, 2));

请检查下面的代码,它可以编译:

class Paper {
public:
    int x, y;
}; 

int main() {
    Paper p[5] = {{5,15}, {5,15}, {5,15}, {5,15}, {5,15}};
}

请参阅这篇文章了解更多细节,我认为它解释得很好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM