2014-04-07 94 views
1

我在C++项目中遇到问题,我正在做一些工作。对于我缺乏C++ OOP知识,我提前表示歉意。C++继承 - 将父母更改为祖父母

我有一系列的课程,所有inheret从一个共同的父母,例如:

class child : public parent 
{ 
    public: 
     ... 
}; 

我的问题是,我需要修改父一个功能,以适应我的代码;不幸的是(虽然我有权访问源代码)父类是由其他项目共享的,并且我的预期改变会导致会破坏其他人的代码的副作用。但是,如果项目主管批准,我可以做出一些改变 - 而且如果没有副作用(例如范围),他通常会这样做。

虽然很明显我可以复制该原始父代,修改它并有效地分支代码,但我确实不希望为了可维护性目的而这么做。

所以我的问题是否有可能让原始父类充当祖父母,并创建一个覆盖祖父函数的简单单功能父类,并将我的代码更改为从新父母继承 - 所有其他在新父母中没有实施的呼叫被传递给祖父母?如果是这样,我怎么做(广义上)?还是有更好的解决方案?或者我完全偏离轨道?

我希望这很清楚。感谢您的帮助,我正在用C++在黑暗中摸索。

+0

是否有一个原因,你不能给孩子自己的版本的功能? – Mark

+0

如果你想把这个功能放在父母身上,同时也担心它会打破其他孩子,它应该暗示你,你试过的东西可能是特定的孩子......所以什么阻止你只是提供这个功能孩子一个人,因为马​​克建议 – Madhusudhan

+0

实际上有约30个孩子,我控制和需要更新的功能,(另外约100人左右写其他人需要旧功能)。应该在问题中明确表示,对不起。 – Caligari

回答

1

如果您认为该功能仅对一个孩子有用,请将该代码仅添加到该孩子。

如果您认为该功能将对更多的孩子有用,请将该代码添加到该父类中,但为其指定一个新名称。现有的其他儿童班不会受到此影响。您可以迁移现有的孩子,以便在允许时使用新功能。

或者,创建一个子类可以暂时使用的API函数,而不是类成员函数。同样,现有的孩子班级及其使用情况不会受到这种变化的影响。如果其他子类需要利用该功能,则可以逐个迁移它们。 API函数是否可以作为成员函数提升可以留作未来决策。

+0

感谢您的回复。我将用新名称将修改过的函数添加到父项中;我认为这是目前最好的解决方案。我将努力说服其他贡献者随时迁移他们的代码:) – Caligari

1

你可以让其他人改变他们的阶级,使指定的方法是virtualhttps://en.wikipedia.org/wiki/Virtual_inheritance

然后,你可以将其覆盖在孩子要么,或使一个新的共同的父。

+0

感谢您的回应 - 有趣的阅读。现在我将与R Sahu的解决方案一起去,但我会记住虚拟继承的内容。 – Caligari