对于一个项目,我必须创建一个具有英尺和英寸变量的类,并且有一个方法可以将这些变量从对象1和对象2添加到一起,然后是对象3,4,依此类推。
CDistance CDistance::add(const CDistance& yourDist) const
{
CDistance total;
total.feet += yourDist.feet;
total.inches += yourDist.inches;
/*if (total.inches > 12)
{
total.feet += (total.inches / 12);
total.inches = total.inches % 12;
}*/
return total;
}
这是我添加的方法,这是主源文件中的一个函数,我处理每个类
void printAndAdd(const CDistance distList[], int size)
{
CDistance new_total;
new_total = distList[0].add(distList[1].add(distList[2].add(distList[3].add(distList[4]))));
new_total.printDist();
}
这是我用来在屏幕上打印数据的方法
void CDistance::printDist() const
{
cout << "Feet: " << this->feet << "\n\n";
cout << "Inches: " << this->inches << "\n\n";
}
我想过为第二行使用for循环,但是我遇到了一些问题。每当我打印数据时,它就是0.好像添加功能不起作用,我不太清楚我甚至不明白我做了什么。根据我的想法,它正在创建一个新的obejct,将引用的对象中的变量添加到创建的对象中,注释掉的部分是我刚刚拿出的部分,稍后会添加,然后返回物体。当我在主源文件中调用该函数时,它会将对象new_total设置为等于对象0,1,2,3和4的总和。我是关闭还是关闭实际发生的事情?我还应该解释一下,我只编程了大约一年,这对我来说真的很有趣,但有时候自然很难,而且我仍然试图掌握c ++中的类的想法。
答案 0 :(得分:0)
问题是你在添加时从不使用实例变量。相反,你总是从一个刚刚铸造的物体开始。试试这个:
CDistance CDistance::add(const CDistance& yourDist) const
{
CDistance total(*this);
total.feet += yourDist.feet;
total.inches += yourDist.inches;
this->feet += yourDist.feet;
this->inches += yourDist.inches;
return total;
}
答案 1 :(得分:0)
我已经完成了一些代码播放,看起来这行不正确:
CDistance total;
total的值永远不会被初始化,因此总是会成为默认构造函数定义的(可能是0/0)。因此,该调用的结果将始终结束传递给输入的任何内容。我想你打算这样做:
CDistance total = *this;
这会将英尺的当前值复制到临时值,然后以下行将添加输入。像你一样通过调用链现在应该按预期连接添加内容。