标题可能有点混乱,但请听我说完。我有两个类,Entity和Human。Entity是Human的父类。当我创建一个Human对象时,它需要一个Entity对象作为构造函数中的参数传递,以便我创建的所有Human对象都具有相同的Entity对象信息。
这是我的问题:如果我改变了Entity对象中的一些数据,我想更新Human对象中的所有数据,这些对象是我在构造函数中使用Entity对象创建的。
我想在我大学的一个项目中实现这个,所以我只允许使用标准库。我写了这个例子,这样它更容易理解:
#include <iostream>
using namespace std;
class Entity{
private:
//DATA
int life;
public:
//DEFAULT CONSTRUCTOR
Entity() {life = 100;}
//PARAMETRIZED CONSTRUCTOR
Entity(int life) {this -> life = life;}
//GETTER
int get_life(){return life;}
//SETTER
void set_life(int new_life){life = new_life;}
//FUNCTIONS
void print_life() {cout << "This entity has " << life << " life" << endl;}
};
class Human : public Entity{
public:
//DATA
string name;
//DEFAULT CONSTRUCTOR
Human() {name = "N/A";}
//PARAMETRIZED CONSTRUCTOR
Human(string name, Entity object){
Entity::set_life(object.get_life());
this -> name = name;
}
};
int main(){
//DATA
Entity Human_data(50);
Human Hero("Steve", Human_data);
Human Villain("Mike", Human_data);
//BODY
Human_data.set_life(5000);
Hero.print_life();
//END MAIN
return 0;}
正如你所看到的,在我将人类数据寿命从50更新到5000之后,它并没有将英雄和恶棍的生命也更改为5000,而只是将人类数据寿命更改为5000。
2条答案
按热度按时间oxf4rvwz1#
我假设当你调用
Human_data.set_life(5000)
时,你想影响所有用Human_data
对象构造的Human
对象。这里有一个例子,说明如何使用引用。但是注意,在类中放置引用不是没有后果的。你可以使用指针,或者更好的智能指针。但是我只是试图说明一般的想法。
从技术上讲,使用引用意味着你必须习惯使用 * 初始化列表 *,因为引用不能赋值。
5sxhfpxr2#
如果所有的“人”也是实体(记住,继承是一种“是一种”关系),那么继承可能是正确的。
但执行上存在缺陷。
不是将
Entity
对象传递给Human
构造函数,并使用单独且不同的Entity
对象来控制“life”,而是将life本身传递给Human
构造函数,并直接在Human
对象上使用set_life
。大概是这样的