【发布时间】:2017-05-13 06:12:37
【问题描述】:
所以基本上假设我现在有 2 节课。 1个叫Human,另一个叫House。
我现在所做的就是让房子制造和摧毁人类,所以基本上在我有的房子.h文件中
Human *humanP;
在 .cpp 文件构造函数中
humanP = new Human;
humanP->something(); // lets me access the methods in the Human class
据我所知,这构成了一个组合,而 House 创建/销毁了 Human 对象。但我需要为我的 Human 对象添加参数,例如身高和年龄。
主要是我想要类似的东西
int age, height;
cout << "Whats your age? << endl;
cin >> age;
cout << "Whats your height? << endl;
cin >> height;
我想做这个
Human humanO(age, height);
这将使用这些参数创建 Human 对象。但我仍然希望将 Human 对象保存在 House 类中,然后在那里销毁。据我所知,我需要对其进行深层复制,以便我可以复制 House 类中的 humanO,然后删除主文件中的对象。
我一直在寻找低谷示例,但有很多不同的示例,任何人都可以编写代码来制作这个在 main 中创建的 Human 对象的深层副本吗?
编辑:
在这里进行编辑而不是回复,因为在这里编写代码更容易。
好吧,另一个愚蠢的问题。如果我使用简单的方法
Human *newPerson = new Human
然后做
House house;
house.addHuman(newPerson)
同时拥有类方法
addHuman(Human *other)
{
this->humanP = other;
cout << humanP->getAge() << endl << endl << endl;
}
它工作得很好,给了我年龄。
如果我使用智能指针它不起作用,我应该改变什么?它给了我诸如“没有匹配功能”之类的错误。我应该在addHuman() 中输入什么参数,以便它可以使用智能指针?
【问题讨论】:
-
你有复制构造函数吗?无论如何,House 为什么要定义那个humanP 成员?它代表什么?
-
也许尽量避免使用
new。如果您将std::vector<Human> humans放入House类中,那么它将使用默认的复制构造函数进行复制。 Is this homework? -
如果您发布一些尝试深拷贝的代码,它会更容易提供帮助。
-
"这样我就可以复制 House 类中的 humanO,然后删除主文件中的对象。" - 只需在 House 类中使用 Human 值,而不是指针。
-
这是我项目的一部分,其中一项任务是基本进行合成和深拷贝。我会在几分钟内进行编辑。基本上,房子是工作和组织其他班级的主要班级。人类属于房子,这就是为什么它被放在那里。好的,我已经看到了一个带有矢量的示例,让我看看我可以编辑什么