c ++在自己的类中创建对象的修改副本

时间:2017-07-31 10:33:44

标签: c++ class

我需要创建一个类,每次创建一个对象时,也会创建一个修改后的副本,并且能够执行相同的方法来回复原始对象和修改对象之间的差异。 我已创建此示例,但它不起作用:

#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中给出了一个错误。你能帮我解决这个问题吗?

修改 很抱歉,如果我没有指定错误,但这是一个运行时错误,我没有从编译器获取任何信息。

2 个答案:

答案 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

}