C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何用C中的for循环创建多个对象?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用for循环创建多个对象,因为最终我会希望这个程序根据我的输入创建不同数量的类.我试图使用上一个 question的答案写这个.但是,当我尝试编译时,我得到错误’没有匹配的功能调用’Genes :: Genes()’
#include <iostream>
#include <cstdlib>
#include <ctime> 

using namespace std;

float random();

class Genes{
 public:
 double cis;
 double coding;
 double effect;
 Genes(double a,double b,double c);
};

Genes::Genes(double a,double C) 
{
  cis=a;
  coding=b;
  effect=c;
};

int main()
{
  int geneno,i;

  srand(time(NULL));

  geneno=4; //this will probably be cin later

  Genes *genes=new Genes[10]

  for(i=0;i<=geneno;i++){
    double d,e,f;

    d=random();
    e=random();
    f=random();

    genes[i]=Genes(d,f);

    cout<<"cis is "<<genes.cis<<'\n';
    cout<<"coding is "<<genes.coding<<'\n';
    cout<<"Effect for gene is "<<genes.effect<<'\n';

    }
 delete[] genes;
 }


float random(){

  float decRANDMAX;

 decRANDMAX=RAND_MAX*1.0;

 return rand()%(RAND_MAX+1)/decRANDMAX;

}

解决方法

在C中,使用New []创建一个数组使用其认/无参数构造@L_673_9@初始化所有对象.

所以这一行:(分号添加)

Genes *genes=new Genes[10];

将导致Genes :: Genes()的十个呼叫.

这通常看起来很好,因为当你不声明任何时候,C会给你一个认的构造@L_673_9@.但是,为了实现这一点,您不能声明任何构造@L_673_9@.你的构造@L_673_9@:

Genes::Genes(double a,double C)

防止编译器为您创建一个认构造@L_673_9@,这反过来又会阻止您创建一个Genes对象数组.

这个问题有两个合理的@R_419_2495@案:

>您可以向Genes添加一个认/无参数构造@L_673_9@.这很简单,但缺乏一些优雅.什么是认的Genes对象?如果这样的对象是有意义的,那么你可能已经声明了一个认构造@L_673_9@.
>查看使用std :: vector而不是数组:http://www.cplusplus.com/reference/stl/vector/.然这在短期内是一个更复杂的@R_419_2495@案,但熟悉标准模板库(提供向量类)将在长期内具有价值.也就是说,如果你刚刚学习C,以前没有看过模板,这可能有点压倒性,你可能想先阅读一些有关模板的内容. (例如http://www.learncpp.com/cpp-tutorial/143-template-classes/)

矢量类允许您声明一个容量,您将放入数组中的对象数量(或者您不能声明容量,导致较慢的插入).然后,当它们被放置到向量中时,它将仅构造对象.你的代码看起来像这样

#include <vector> // to get the vector class deFinition
using std::vector; // to 

vector<Genes> genes;
genes.reserve(geneno); // optional,but speeds things up a bit

for(i = 0; i <= geneno; i++) {
    double d = random();
    double e = random();
    double f = random();

    genes.push_BACk(Genes(d,f));
}

最后一句话(大致)相当于:

Genes temp(d,f);
genes.push_BACk(temp);

vector :: push_BACk将一个项目添加到向量的背面,并将向量容量增加1:http://www.cplusplus.com/reference/stl/vector/push_back/

您可以随后以与阵列相同的方式访问向量中的元素:

cout << "The third gene's coding is " << genes[3].coding << endl;

您可以使用vector :: size()查询向量的大小:

cout << "The vector has " << genes.size() << "elements" << endl;

大佬总结

以上是大佬教程为你收集整理的如何用C中的for循环创建多个对象?全部内容,希望文章能够帮你解决如何用C中的for循环创建多个对象?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。