我正在写第二人称只是因为它很容易,对你而言.
你正在使用一个游戏引擎,并且真的希望特定的引擎类有一个新的方法来做'bla'.但是你宁愿不将你的"游戏"代码传播到"引擎"代码中.
因此,您可以使用一种新方法从中派生一个新类,并将该代码放在"游戏"源目录中,但也许还有另一种选择?
所以这在C++语言中可能完全是非法的,但是你首先想到,"也许我可以通过我自己的标题向现有类添加一个新方法,其中包含'父'标题和一些特殊语法.这在工作时是可行的使用命名空间,例如..."
假设你不能在多个标题中声明一个类的方法(并且你很可能不能确定),那么支持"中间件/引擎/库"和"应用程序"之间的清晰划分的其他选项是什么,你奇迹?
我唯一的问题是,"你的附加功能是否需要成为会员功能,还是可以成为免费功能?" 如果您想要做的事情可以使用类的现有接口来解决,那么唯一的区别是语法,您应该使用自由函数(如果您认为这是"丑陋的",那么......吮吸它并继续前进, C++不是为monkeypatching设计的).
如果你试图了解该类的内部内容,则可能表明原始类缺乏灵活性(它没有为您提供足够的信息以便从公共接口执行您想要的操作).如果是这种情况,也许原始类可以"完成",并且你又回到了自由功能的基础上.
如果绝对没有一个可以工作,你只需要一个成员函数(例如原始类提供了你想要的受保护成员,而你没有自由修改原始界面)...只有这样才能诉诸于继承和成员函数实现.
有关深入讨论(以及解构std::string
'),请查看本周的"大师"类大师文章.