【发布时间】:2011-08-01 18:56:29
【问题描述】:
这更像是一个一般性的编程问题,所以我给出的代码示例只是伪代码。我用 C++、Java 和 Python 编程,所以伪代码是它们的混合体。我不太确定这个名字叫什么,所以如果你能给我一个名字,我可以谷歌了解更多关于它的信息,我将不胜感激。
假设我有一个名为 A 的类。在这个类中,我创建了一个名为 B 的类的实例:
class A {
//instance variables
classB;
variable1;
variable2;
//instance methods
instanceFunction(parameter1, parameter2) {
//Do Stuff
}
function1(parameter1) {
classB = new B(some parameters);
}
setVariable1(value) {
variable1 = value;
}
getVariable2() {
return variable2;
}
}
在 B 类中,我想对 A 类中的实例变量进行更改或使用。我可以通过将 A 的引用传递给 B 来做到这一点。所以我的 A::function1 看起来像这样:
function1(parameter1) {
variable1 = new B(this, other parameters);
//Python syntax:
//variable1 = B(self, other parameters)
}
我的 B 类看起来像这样:
class B {
//instance variables
parentClass;
variable2;
//instance methods
instanceFunction(classA, other parameters) {
parentClass = classA;
}
function1() {
parentClass.setVariable1(someValue);
}
function2() {
variable2 = parentClass.getVariable2();
}
}
还有什么其他方法可以在 B 类中使用 A 类中的变量?
如果代码是 C++ 或 Java,假设所有变量都是私有的,所有方法和函数都是公共的。还假设所有变量都通过引用或指针传递。
编辑:
首先,感谢所有回复!
一些澄清:
我问这个问题的原因是我已经用 C++ 和 Python 完成了大量的 Qt 编程。在 Qt 中,有信号和槽。这让内部对象告诉外部对象做某事。例如,我有一个对象 A,里面有对象 B 和 C。对象 B 发生了一些变化,B 需要让 A 和 C 知道。所以B会发出一个信号。 A 会捕捉到这个信号并做它需要做的事情。然后,A 也会让 C 知道 B 发出了这个信号。这样 C 就可以做它需要做的事情了。
我之所以问这个问题是因为我想知道如何在不使用 Qt 库的情况下完成我所描述的事情。
另外,我们假设 B “不是” A,所以我不能/不想使用继承。
【问题讨论】:
-
我认为这是一个非常糟糕的主意。
-
您是否要求使用 Java、Python 或 C++ 编写答案?删除您不要求答案包含的语言。如果您正在寻找一种设计模式,您可能还需要添加该标签。