gpt4 book ai didi

c++在两个子实例之间共享父属性

转载 作者:行者123 更新时间:2023-11-27 22:58:04 25 4
gpt4 key购买 nike

假设我有一个父类 class Parent 和两种子类 class Son类女儿SonDaughter 共有的属性在 Parent

中定义

现在我定义了一个 Son 实例和一个 Daughter 实例。他们有不同的方法,可以做不同的事情,但是当 Son 做某事时,Daughter等待(并且相互)。 SonDaughter 的 Action 是重新定义 Parent 中应该考虑的一些属性两个 child 。

实现它的第一个想法是将这些属性设置为 static 所以如果女儿改变了一些东西,它也会影响儿子。但我的问题是它会影响 SonDaughter 的所有实例,我只想影响那些在同一个“家庭”中的人。

这是暴露我的问题的伪代码:

class Parent{
public:
/*define some constructors and parent stuff*/

void set_family_name(std::string f){ family_name = f; }

protected:
std::string family_name;
}

class Son : public Parent{
public:
/*define some constructors and son stuff*/
}

class Daughter : public Parent{
public:
/*define some constructors and daughter stuff*/
}

int main(){
Son JohnSmith(/*some attributes*/);
Daughter AnnaSmith(/*some attributes*/);

Son BobWeston(/*some attributes*/);

JohnSmith.set_family_name("Smith"); /*should also affect AnnaSmith but not BobWeston*/
}

有没有办法连接子的两个实例,这样当一个改变一个parent argument 它反射(reflect)在另一个而不是所有的参数上?

我想到的第一个解决方案是设置其他类,class FamilyAttribute 将在 Parent 中引用。像这样的东西:

class FamilyAttribute{
public:
/*define some constructors and family stuff*/

void set_family_name(std::string f){ family_name = f; }

private:
std::string family_name;
}

class Parent{
public:
/*define some constructors and parent stuff*/

void set_family_name(std::string f){ attribute->set_family_name(f); }

protected:
FamilyAttribute* attribute;
}

但是这会让我重写所有的方法,这也会增加方法调用的数量。这看起来也很奇怪,因为现在 Parent 只是对多态性有用(我需要)。

有没有更简洁的方法?

最佳答案

Is there a way to connect two instances of child so that when one changes a parent argument it is reflected on the other one but not in all of them ?

在类型系统中不是自动的,不。

如果不使用指针之类的东西来连接它们,就无法将一个类型的一些实例连接到一个类型的其他任意实例。

看起来你想要建模的是人,有两种类型的具体子类,儿子和女儿(或男人和女人),所以儿子是一个人,女儿是一个人。

姓氏是一个属性,应该通过HAS-A关系建模,这样一个Person HAS-A指向一个FamilyName对象,多个Person对象可以引用同一个FamilyName。 (shared_ptr 将是对其进行建模以便正确管理所有权的最佳方式)。

But this will make me rewrite all methods and this will also multiply the number of methods calls.

无法回答这个问题,因为您没有展示任何方法,因此无法知道为什么会导致您重写它们。

It also seems strange because now Parent is only useful for polymorphism (which I need).

要么我不明白你的意思,要么我不明白为什么这很奇怪或为什么这是个问题。如果你需要多态性,为什么有一个提供多态接口(interface)的基类会很奇怪?

关于c++在两个子实例之间共享父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com