我正在做作业(并了解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()
对象并使用直接索引(或使用迭代器)从向量读取,则对象不会“消失”。为什么他们表现出这种行为?
答案 0 :(得分:1)
你的直接问题很可能是因为operator =
的执行不力而导致的。我建议逐步调试调试器中的代码。 operator =
(和复制构造函数)应该正确地将值复制到目标对象。
代码还有许多其他问题 - 你的命名约定是......有趣的,你似乎试图将你拥有的任何内容转换为代码编译所需的任何结果,而无需推理实际应该做什么。很少需要C ++代码中的malloc
......
答案 1 :(得分:0)
我认为一般的问题是,我总是在java编程(但现在在大学里我必须用C / C ++编写,命名约定,比如java和匈牙利语,Cipő意思是Shoe)。在Java中没有指针,并且所有对象总是通过引用访问,但看起来(如我测试的)如果我创建一个新的对象数组,C ++将不会仅分配指向对象的100个指针(对象数据开始的位置) ),它分配了100 * sizeof(对象),对于这个地方,我可以添加数据麻烦的操作员。
这是真的吗?
所以我尝试像在java中一样管理对象访问。
为什么要复制Object,如果它本身存在? (我不喜欢“克隆”对象)。