gpt4 book ai didi

java - 关于范围的一般编程问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:39 25 4
gpt4 key购买 nike

这更像是一个一般的编程问题,所以我给出的代码示例只是伪代码。我用 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,假设所有变量都是私有(private)的,所有方法和函数都是公共(public)的。还假设所有变量都通过引用或指针传递。

编辑:

首先感谢大家的回复!

一些说明:

我问这个问题的原因是我用 C++ 和 Python 进行了大量的 Qt 编程。在 Qt 中,有信号和槽。这让内部对象告诉外部对象做某事。例如,我有一个对象 A,其中包含对象 B 和 C。对象 B 发生了一些变化,B 需要让 A 和 C 知道。所以B会发出一个信号。 A 将捕获此信号并执行它需要执行的操作。那么,A也会让C知道B发出了这个信号。这样 C 就可以做它需要做的事情。

我问这个问题的原因是因为我想知道如何在不使用 Qt 库的情况下做我描述的事情。

此外,我们假设 B“不是”A,所以我不能/不想使用继承。

最佳答案

I am not too sure what the name of this is called...

我在理解你的伪代码时遇到了问题,但你可以通过以下方式完成你正在寻找的内容:

  • Inheritance , 它允许派生类从基类访问 protected 变量(静态或实例变量)
  • Friend functions (C++)(允许函数访问类上的私有(private)实例变量)
  • Dependency Injection (但可能只有当你有比你在问题中实际陈述的更复杂的要求时。在这个 super 简单的例子中,当一个实例被传递给一个函数时,你只是访问公共(public)属性或字段 - 你可能有通过公共(public) getter/setter 访问它们,因为您希望变量是私有(private)的)

编辑:

编辑后,很明显您想要 the Observer Design Pattern .这允许您将响应状态更改的代码与发出状态更改信号的代码分离。

该模式与其说是关于访问变量(正如我的第一个链接所涉及的),不如说是关于响应事件(或“状态转换”,如果您将您的类视为 Finite State Machine)。

关于java - 关于范围的一般编程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com