从成员类访问父类成员

Acess Parent-Cass members from a member-Calss

为了让我的问题更好理解一些代码:

class parent{
    public:
    int number;
    string getUnit();
    myClass myMember;
}

class myClass{
    public:
    int counter;
    string getParentUnit();
}

现在我想让我的 getParentUnit() 做类似

的事情
string myClass::getParentUnit(){
    retrun parent.getUnit();
}

我知道我可以修改 myClass 以在构造函数中获取 parentthis 指针并将其保存以备后用,但我有几个 classes "inside" 彼此喜欢:

class a{
<...>
    b B;
<...>
}

class b{
<...>
    c C;
}

class c{
<...>
    d D;
<...>
}

在 class d 中,我需要访问 class a.

中的内容

因此,如果有更好的方法,我不想更改所有内容以获得向后引用。

问候 NIOSAT

这是一个常见的问题:有一个应用程序(对应classa的对象),然后抽象层次较低的对象需要访问应用程序上下文(成员a).

人们经常应用简单但问题重重的全局变量解决方案,使整个应用程序代码都可以访问 a。请注意:这意味着 d 不可测试,因为您必须设置整个应用程序才能使 d 正常运行。如果依赖项不影响 d 的行为,而只是添加边际副作用,例如记录器,那么它可能是可以接受的,因为您仍然可以在没有记录器的情况下测试 d 的行为。

最简洁的方法是让每个对象在构造函数或 setter 函数中显式获取其依赖项。现在这需要更多的工作,但它创建了可维护的代码,因为每个 class 的 API 明确说明了依赖项是什么。此外,每个 class 现在都可以独立测试。

class A {
public:
  A(Params p) : b(p) {}
private:
  Params params;
  B b;
};

class B {
public:
  B(Params p) : C(c) {}
private:
  Params params;
  C c;
};

class C {
public:
  C(Params p) : params(p) {}
private:
  Params params;
};

我推荐观看 https://www.youtube.com/watch?v=RlfLCWKxHJ0,其中解释得非常好。