如何处理父类中未使用的变量? [关闭]

Posted

技术标签:

【中文标题】如何处理父类中未使用的变量? [关闭]【英文标题】:How to handle unused variable in parent class? [closed] 【发布时间】:2014-08-25 17:54:37 【问题描述】:

假设我正在编写一个任何人都可以访问的库文件。

我的图书馆设计是这样的。

Class College

    int no_of_staffs;
    string Name;
    int Area;
    string head;
        int rating ;


Class Department  : Class College



Class Clas-s-room : Class Department

    string Leader;


在为 C 创建实例时,也会为 A 类成员分配内存。

我不会在任何情况下都使用 A 的所有成员。但是在创建实例时,将为它们分配内存。但这似乎是在不必要地浪费内存。

设计是否有问题或有什么方法可以处理这个问题

【问题讨论】:

为什么 A 中需要某些东西,而 C 中不需要?我有一种感觉,您在滥用继承,或者您至少可以做得更好,但是对于受限示例,这是不可能的。你能举一个例子,说明为什么派生类没有使用基类中的某些东西吗? 这表明存在设计缺陷恕我直言。您在示例中给出的内容无法从一般 POV 中回答您的问题。可能是你有一个 XY 问题。每当您使用继承时,您都应该认真询问 class C is a class Bclass B is a class A,这些可以在任意的接口级别(这种情况很少发生)。 @Vinoth,请查看我的回答。我认为您可能需要重新考虑您的设计。 【参考方案1】:

如果我有一个Animal 类,它可能有一个bool can_fly 字段,因为它适用于从它继承的每个类(LionMonkeyHawk 等...)。如果A 的成员变量不是这样,那么您的设计就是错误的。

我不会将int max_flying_height 变量放入Animal,因为它不适用于MonkeyLion。我可能有另一个类Bird,它继承自Animal,并有一个int max_flying_height成员变量那里

编辑

查看您的编辑,我认为您对何时使用继承感到困惑。想想“is a”与“has a”规则(如果您有“has a”关系,则添加成员变量。如果您有“is a”关系,则添加继承)。

在我的示例中,Lion Animal,所以它继承。在您的示例中,教室是一个部门吗?或者一个部门有教室吗?或许系班应该有std::vector 的教室?

【讨论】:

【参考方案2】:

没有办法阻止子类继承其超类的所有数据成员。面向对象继承背后的思想是,如果C 继承自B,那么C 的实例也是B 的实例。

例如,假设您有一个函数myFunc(B b);。在函数的某处,它访问成员b.e。现在,想象你有一个C,它继承自B,但不包含成员int e。如果您尝试将其传递给myFunc(),您将成功,因为C 是一个 B,但随后myFunc() 将尝试访问不存在的成员。这毫无意义。

还有一些技术原因,与内存中类的布局有关,这使得这不可能。当子类在内存中布局时,超类的所有成员首先出现,然后是子类的所有成员。这意味着内存中对C 的引用可以是相同的引用,无论函数认为这样的引用是B 还是C。如果是C,则函数知道整个变量;如果它是B,那么它只知道B 正常结束的时间,之后可能是使它成为C 的对象的其余部分,或者它可以是随机内存,或者不同的变量,或其他。

【讨论】:

以上是关于如何处理父类中未使用的变量? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何处理js文件eslint错误中未使用的变量?

类中的变量注释[关闭]

如何处理巨大的表格[关闭]

db关闭时如何处理flyway

如何处理 AWS 中的开发和生产环境? [关闭]

实体框架如何处理大量记录? [关闭]