Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class design 基类和派生类之间是否应该共享特定比例的成员?_Class Design_Oop_Member Variables - Fatal编程技术网

Class design 基类和派生类之间是否应该共享特定比例的成员?

Class design 基类和派生类之间是否应该共享特定比例的成员?,class-design,oop,member-variables,Class Design,Oop,Member Variables,我目前正在为我的课程作业编写的应用程序设计类,我有两个类,听起来好像它们应该是基类派生的类对,并且确实共享两个成员变量,我的问题是它们每个都有七个成员变量,没有操作 这些类结构的原因是我正在构建一个RSS阅读器,我打算让这两个类保存提要上的数据。第一个将保存提要本身上的数据,例如源url,本地存储中rss.xml文件的位置,上次更新提要时,第二个将保存提要中包含的文章的信息,例如发布日期/时间和基于发布日期的整数索引,用于按时间顺序对文章进行排序 class feed { string

我目前正在为我的课程作业编写的应用程序设计类,我有两个类,听起来好像它们应该是基类派生的类对,并且确实共享两个成员变量,我的问题是它们每个都有七个成员变量,没有操作

这些类结构的原因是我正在构建一个RSS阅读器,我打算让这两个类保存提要上的数据。第一个将保存提要本身上的数据,例如源url,本地存储中rss.xml文件的位置,上次更新提要时,第二个将保存提要中包含的文章的信息,例如发布日期/时间和基于发布日期的整数索引,用于按时间顺序对文章进行排序

class feed
{
    string title;
    string description;
    string feed_url;
    string local_location;
    string channel;
    bool feed_is_changed; // This is a flag that will be raised and lowered
      // when the feeds are being refreshed
    double last_updated; // The last update date/time will be converted to a
      //standardised double value
}

class feed_item
{
    string title;
    string description;
    double pub_time;
    double pub_time_in_sec; // I'm separating the seconds so they can be used
      // for a 'sub-index' when there are multiple feeds with the same pubtime
      // (there are restrictions on the data types we are allowed to use
      // (concocting work-arounds will aid in understanding, etc))
    double pub_date;
    int pub_year;
    int order_in_list; // The index that will be calculated from pub_time,
      // pub_date, etc
}
上面的代码不完整,我目前只识别变量和函数,私有/公共位将在最终确定后出现。从上面的代码中可以看到,共享的仅有两个变量是title和description


我不确定是否值得让它们成为一个实体基对,仅仅停用五个不相关的变量,仅仅让它们完全分开类是否更有效,或者这是否完全是一个情境问题,并且这两种方式都可以论证。我担心的是,代码可能变得难以维护和扩展,但在一种或另一种方法中可能存在固有的执行开销。如果您对此有任何想法和建议,我们将不胜感激。

就一个派生类?那么几乎可以肯定的是,继承是错误的设计

继承是有限制的,而这些限制通常直到后来才出现,使得决策更加昂贵


我的经验法则是避免继承,除非并且直到我能够清楚地说明使用它的理由。

只有一个派生类?那么几乎可以肯定的是,继承是错误的设计

继承是有限制的,而这些限制通常直到后来才出现,使得决策更加昂贵


我的经验法则是避免继承,除非和直到我能够清楚地说明使用它的理由。

提要项不是提要,因此它失败了,不应该是子类。我应该检查一下你的耳朵——这对类听起来绝对不像是子类


偶尔(非常非常偶尔)实现继承是一个好主意,但通常最好将共享部分提取到一个单独的类中,并在两个实现中使用它。在这里,这绝对是一个糟糕的想法——没有很好的代码共享,所以好处充其量只是模糊的。保持你的代码简单

feed\u项不是feed,因此它失败,不应该是子类。我应该检查一下你的耳朵——这对类听起来绝对不像是子类


偶尔(非常非常偶尔)实现继承是一个好主意,但通常最好将共享部分提取到一个单独的类中,并在两个实现中使用它。在这里,这绝对是一个糟糕的想法——没有很好的代码共享,所以好处充其量只是模糊的。保持你的代码简单

如果您真的想要一个基类:

struct NamedItem {  // or maybe just "Item"
  string title;
  string description;
};

struct Feed : NamedItem {/*...*/};
struct FeedItem : NamedItem {/*...*/};
或者,在这种情况下,通常首选并更适合使用安全壳:

struct ItemInfo {
  string title;
  string description;
};

struct Feed {
  ItemInfo info;
  //...
};
struct FeedItem {
  ItemInfo info;
  //...
};

特别是,如果在不知道最派生的类型的情况下不知道如何使用“NamedItem”,则使用继承是没有意义的。

如果确实需要基类:

struct NamedItem {  // or maybe just "Item"
  string title;
  string description;
};

struct Feed : NamedItem {/*...*/};
struct FeedItem : NamedItem {/*...*/};
或者,在这种情况下,通常首选并更适合使用安全壳:

struct ItemInfo {
  string title;
  string description;
};

struct Feed {
  ItemInfo info;
  //...
};
struct FeedItem {
  ItemInfo info;
  //...
};

特别是,如果在不知道最派生的类型的情况下不知道如何使用“NamedItem”,那么使用继承就没有意义。

定义“worth”和“effective”。你优化的目的是什么?我可以问一个有7个成员变量而没有操作的类的目的是什么吗?@Paul Hankin当我说“值得”和“高效”时,我指的是代码的可维护性和可伸缩性,以及执行效率。抱歉,我应该在问题中指定它们是实体类(我正在构建一个RSS提要阅读器,它们包含一个变量,该变量将同时包含提要和组成文章(以及它们的元数据)分别。对不起,我应该指定这个。我已经更新了问题以回答Paul Hankin和qstarin的问题。我无法完全按照您对类用途的描述进行操作。如果您为它们添加代码,我会更有信心推荐这种或那种方法。此外,绝对没有执行这里的时间考虑-这将是过早的微观优化。定义“价值”和“效率”。你优化的目的是什么?我可以问一个有7个成员变量但没有操作的类的目的是什么吗?@Paul Hankin当我说“价值”和“效率”时,我指的是代码的可维护性和可伸缩性,以及执行性n效率。对不起,我应该在问题中指定它们是实体类(我正在构建RSS提要阅读器,它们包含包含提要和组成文章(及其元数据)的变量)分别。对不起,我应该指定这个。我已经更新了问题以回答Paul Hankin和qstarin的问题。我无法完全按照您对类用途的描述进行操作。如果您为它们添加代码,我会更有信心推荐这种或那种方法。此外,绝对没有执行这里的时间考虑——这将是过早的微观优化。