对象未添加到数组中

时间:2013-06-01 01:10:58

标签: c++ arrays vector

我正在做作业(并了解C ++的工作原理)。 我的任务是:

  

用字段定义一些类...(没关系)   从这些对象创建一个向量和数组并迭代它! (列出,按字段平均等)。

现在它正确适用于vector,但数组不起作用:

static Cipo* cipok;  // object array
static int cep = 0;  // endpoint index
static int ccap = 0; // array size

Cipo的默认assignmet操作符:

public: Cipo& operator=(const Cipo &c)
{
    return ((Cipo&)c);
}

Initalization:

cipok = (Cipo*) malloc(sizeof(Cipo*)*100); // new Cipo[num] doesn't work..
ccap = 100;

测试代码:

for (int i = 0; i < 5; i++)
{
    Cipo c(43.5, "str", 12670, false, false);
    std::cout << c.ar <<" ";
    cipok[cep] = c;
    std::cout << cipok[cep].ar << " ";
    cep++;
}

结果:

  

12670 0 12670 0 12670 0 12670 0 12670 0

但是如果我使用向量push_back()对象并使用直接索引(或使用迭代器)从向量读取,则对象不会“消失”。为什么他们表现出这种行为?

2 个答案:

答案 0 :(得分:1)

你的直接问题很可能是因为operator =的执行不力而导致的。我建议逐步调试调试器中的代码。 operator =(和复制构造函数)应该正确地将值复制到目标对象。

代码还有许多其他问题 - 你的命名约定是......有趣的,你似乎试图将你拥有的任何内容转换为代码编译所需的任何结果,而无需推理实际应该做什么。很少需要C ++代码中的malloc ......

答案 1 :(得分:0)

我认为一般的问题是,我总是在java编程(但现在在大学里我必须用C / C ++编写,命名约定,比如java和匈牙利语,Cipő意思是Shoe)。在Java中没有指针,并且所有对象总是通过引用访问,但看起来(如我测试的)如果我创建一个新的对象数组,C ++将不会仅分配指向对象的100个指针(对象数据开始的位置) ),它分配了100 * sizeof(对象),对于这个地方,我可以添加数据麻烦的操作员。

这是真的吗?

所以我尝试像在java中一样管理对象访问。

为什么要复制Object,如果它本身存在? (我不喜欢“克隆”对象)。