来自成员 - Calss 的 Acess Parent-Cass 成员

Acess Parent-Cass members from a member-Calss

本文关键字:成员 Acess Parent-Cass Calss      更新时间:2023-10-16

为了使我的问题更好地理解,这里有一些代码:

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指针并将其保存以供以后使用,但我有几个彼此"内部"的类,例如:

class a{
<...>
    b B;
<...>
}
class b{
<...>
    c C;
}
class c{
<...>
    d D;
<...>
}

在课堂d我需要访问类a的内容.

因此,如果有更好的方法可以做到这一点,我不想更改所有内容以具有向后引用。

问候镍锰铝

这是一个

常见的问题:有一个应用程序(对应于类a的对象(,然后较低抽象级别的对象需要访问应用程序上下文(a的成员(。

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

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

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,那里解释得很好。