c++改变继承类
C++ Change Inherited Class
假设我有以下内容
- A类-主类(不能更改)
- B类-基类
- C类-备用基类
A类定义为
Class A : public Class B
{};
我该如何以编程方式更改它,使其改为Class A : public Class C
?
原因是我希望类C是类B的存根简化版本,用于单元测试的目的。所以我需要一种方法来生成类a的一个版本,而不修改类a,然后使用类C的方法而不是类b。
希望这是有意义的?
您可以使用模板并在编译时更改它:
template<typename T>
class AT: public T { /* ... */ };
现在,在某个地方,你可以这样做:
#ifdef DEBUG
using A = AT<C>;
#else
using A = AT<B>;
#endif
否则,如果你想在运行时这样做,你应该使用组合而不是继承,例如:
struct A {
I subclass;
};
// ...
struct B: I {};
struct C: I {};
这样,您就可以在软件中引入一个触发器,强制在您的A
实例中注入B
或C
实例。
只要A
的实例将它的请求转发给底层类,派生类是什么并不重要,重要的是它的接口。
回答实际的问题:你不能在运行时改变基类的类型。
如果A
继承自B
,那就完了。
根据您的评论,有几个答案,但真正的答案是不使用继承。
-
使用作文:
class wrapper { thing_you_want_to_mock& thingie; // all the wrapped functionality };
在这里,您可以创建一个模拟
thing_you_want_to_mock
,并用模拟对象测试包装器。这里的问题是,我假设thing_you_want_to_mock
有一个可重写的接口,这可能不是你的情况。 -
使用模板组合:
template<typename ThingYouWantToMock> class wrapper { ThingYouWantToMock thing; // Wrapper functions that call functions on thing };
两者都是…策略模式!以某种形式。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 变量没有改变?通过向量的函数调用
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 继承的方法不会更改变量值
- 从两个无法改变的标头继承
- 基于继承的类型参数改变父虚拟函数的行为
- c++改变继承类
- 改变继承顺序会产生不同的结果