C++ 在其自己的类中创建对象的修改副本
c++ create a modified copy of an object inside its own 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
中给了我一个错误。你能帮我解决这个问题吗?
编辑抱歉,如果我没有指定错误,但这是一个运行时错误,我没有从编译器获得任何信息。
如果您没有任何好的用途,请转储指针并改用本地框。
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();
}
如果我理解正确,_instance是用于未更改的原始对象(单例(,也可以更新临时对象(boxTemp(
#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();
};
static Box* getInstance() {
if (_instance == 0) {
_instance = new Box;
}
return _instance;
}
void setTemp(Box *b1) {
boxTemp = b1;
}
private:
Box* boxTemp;
static Box *_instance;
};
Box* Box::_instance = 0;
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;
Box *orj = Box::getInstance();
orj->l = 4;
orj->w = 5;
orj->h = 6;
std::cout << "*** Vol: " << box.getVol() << std::endl;
std::cout << "*** Surf: " << box.getSurf() << std::endl;
orj->setTemp(&box);
std::cout << "Vol Diff: " << orj->getVolDiff() << std::endl;
return 0;
}
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- C++ 在其自己的类中创建对象的修改副本
- 从c++中GUI中创建的对象修改GUI