【问题标题】:Acess Parent-Cass members from a member-Calss从 member-Class 访问 Parent-Class 成员
【发布时间】:2016-02-11 11:11:26
【问题描述】:

为了让我的问题更容易理解,这里有一些代码:

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 类中的内容。

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

问候 NIOSAT

【问题讨论】:

  • myClass不应该继承parent吗?
  • 将 myClass 更改为 "class myClass : public parent" 然后只需使用 "return getUnit();"
  • 正如您的问题所说的“访问父类”,我没有看到任何继承关系。您应该有继承权才能拥有父子关系。请以正确的方式编辑问题,以便我们可以为您提供更好的答案。
  • 那是我的问题...我不知道如何恰当地描述我的问题

标签: c++ class parent member


【解决方案1】:

这是一个常见的问题:有一个应用程序(对应于类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,这里的解释非常好。

【讨论】:

  • 这似乎是唯一真正的方法,除了一些有线指针算法在 RAM 中查找内容,所以我想我必须添加所有向后指针,但谢谢
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2014-10-30
  • 1970-01-01
相关资源
最近更新 更多