从成员类访问父类成员
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
以在构造函数中获取 parent
的 this
指针并将其保存以备后用,但我有几个 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,其中解释得非常好。
为了让我的问题更好理解一些代码:
class parent{
public:
int number;
string getUnit();
myClass myMember;
}
class myClass{
public:
int counter;
string getParentUnit();
}
现在我想让我的 getParentUnit()
做类似
string myClass::getParentUnit(){
retrun parent.getUnit();
}
我知道我可以修改 myClass
以在构造函数中获取 parent
的 this
指针并将其保存以备后用,但我有几个 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,其中解释得非常好。