【问题标题】:Can two inherited classes access the same variable in a base class?两个继承的类可以访问基类中的同一个变量吗?
【发布时间】:2012-09-23 20:38:20
【问题描述】:

什么是设计课程的好方法?我正在尝试创建一个简单的聊天程序。我希望封装屏幕中对象使用的所有内容。我创建了一些类,一个日志类,一个消息堆类(用于保存已接收和发送的消息),一个文本框类和一个按钮类。我希望消息堆、文本框和按钮共享同一个字符串变量,但我希望它封装在类中。

我确实尝试过创建一个 Base 类。这将保存文本框和按钮类共有的所有数据和函数。这三个类将从 Base 派生以使用其共享变量。只有当我这样做时,变量才没有共享。有没有办法做到这一点?有点像全局变量?仅在其自己的类及其派生类中?两个派生类的两个对象都应该能够访问基类对象的变量。

【问题讨论】:

  • 将基类视为其后代的模式。其中的每个实例都将包含其自己的派生变量 - 不与他人共享。因此,在这种情况下继承不起作用。有很多可能的解决方案。例如,您可能希望有另一个类来管理您的所有东西。创建您要在此处共享的变量并将其注入您通过构造函数创建的对象中 - 作为参数传递,存储到它们的变量中。在 UI 中,经常使用名为 MVC 的模式。它基于一个有点相似的想法。一个好的 OOD 教程会有所帮助。
  • 我正在使用 C++。但这是非常有用和有帮助的!谢谢!

标签: class


【解决方案1】:

您正在混淆类和对象。当你有一个带有一些成员变量的基类时,所有派生类都可以(可能)访问基类中的成员变量。

但是,当您实例化不同的派生类或其中一个派生类多次时,每个对象都有一组完整的独立成员变量,包括来自基类的成员变量,因为这正是对象的本质。

如果您希望某些对象组使用相同的“共享”变量,那么您可以将这些共享的东西放入一个专用的“共享”类中。然后对于需要共享这些“变量”的每组对象,您创建这个“共享”类的一个实例,并将其传递给该组中的所有对象。

这也比摆弄“静态”类成员或在您使用的语言中调用它们更灵活,因为您可以通过拥有多个“共享”对象和准确确定哪些“实际”对象共享相同的“共享”数据/变量。

如果不了解发生了什么,很难就如何设计类和对象层次结构提供更多建议。

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 2014-09-12
    • 2023-03-18
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多