如何在修改设计时停止现有代码基类的实例创建
How instance creation of base class of existing code can be stopped while modifying the design?
class base {};
class der1 : public base{};
class der2 : public base{};
..........
..........
class derXXX : public base{};
有几个类是从基派生出来的。现有代码:基类不是抽象类,所以所有派生类都有基类的实例。所有的测试都完成了。
要求:现在我想停止基类的实例创建,而不需要对所有派生类进行任何更改/测试。怎样才能做到呢?
一个选项是让Base的每个构造函数都受保护,这样它们只能被派生类和类本身访问。这将阻止对象本身的实例化,但允许基类的实例化。
如果基类没有构造函数,则只需声明一个新的不带参数的空构造函数。另外,一定要提供复制构造函数的实现(或者保持未实现和私有),这样自动生成的复制构造函数就不会公开可见。
将所有的base
类构造函数(包括默认构造函数和复制构造函数)设置为private或protected
相关文章:
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 使用哪种模式来执行新代码,只需添加基类的新子类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 重构类:无法将派生类中成员函数的公共代码移回基类
- 两个子类具有相同的代码,但基类不同.如何确保重复使用?
- 一般函数中类的概括为基类创建对象代码
- 无法使用在模板化基类 [C++] 中声明的枚举编译代码
- 用typedeffing模板基类来简化代码是一种好的做法吗
- 为什么继承的函数隐藏在这个代码的基类中
- 编译器在这段代码中做了什么(派生类对象的基类指针)
- 假设没有公共代码,将公共代码移到基类中是一种好做法吗?
- 在调用基类构造函数之前执行代码
- 如何在修改设计时停止现有代码基类的实例创建
- 是否可以通过在基类中添加一个新的虚拟函数来破坏代码
- 当派生类的析构函数是虚拟的而基类的 dtor 不是时,代码崩溃
- 插件代码中的公共基类