我需要创建一个类,每次创建一个对象时,也会创建一个修改后的副本,并且能够执行相同的方法来回复原始对象和修改对象之间的差异。 我已创建此示例,但它不起作用:
#include <iostream>
class Box
{
public:
double l, w, h;
double vol, surf;
double getVol(){return l*w*h;};
double getSurf(){return (l*w + l*h + w*h) *2;};
double getVolDiff()
{
boxTemp->l = l+1;
boxTemp->w = w;
boxTemp->h = h;
return getVol() - boxTemp->getVol();
};
private:
Box* boxTemp;
};
int main(int argc, const char * argv[]) {
Box box;
box.l = 1;
box.w = 2;
box.h = 3;
std::cout << "Vol: " << box.getVol() << std::endl;
std::cout << "Surf: " << box.getSurf() << std::endl;
std::cout << "Vol Diff: " << box.getVolDiff() << std::endl;
return 0;
}
此示例在方法getVolDiff
中给出了一个错误。你能帮我解决这个问题吗?
修改 很抱歉,如果我没有指定错误,但这是一个运行时错误,我没有从编译器获取任何信息。
答案 0 :(得分:2)
转储指针,如果您没有任何好处,请使用本地框。
double getVolDiff() {
Box boxTemp; // temp, no allocation
boxTemp.l = l+1;
boxTemp.w = w;
boxTemp.h = h;
return getVol() - boxTemp.getVol();
}
添加构造函数可以简化您的代码
Box(double l, double w, double h) : l(l), w(w), h(h) {}
double getVolDiff() {
Box boxTemp(l+1, w, h); // temp, no allocation
return getVol() - boxTemp.getVol();
}
答案 1 :(得分:0)
如果我理解正确, _instance 是针对未更改的orijinal对象( Singleton ),也可以更新temp对象( boxTemp )
$str
}