【问题标题】:Override the behavior of base class private member in a derived class, C++在派生类 C++ 中覆盖基类私有成员的行为
【发布时间】:2015-12-11 03:45:32
【问题描述】:

假设我有一个来自软件包的类,所以我没有办法改变设计,它具有以下形式:

class A
{
public:
  A(int degree) 
  {
    ...
    initialize_points();
    ...
  }
  ...
private:
  ...
  void initialize_points() 
  { 
    int number = 1;
    // proceed to do computations using the number specified above
    ...
  }
  ...
}

我需要的是在函数initialize_points() 中指定的number 之外的所有内容中都有一个类似于A 的类B。比如说,我希望它是 34 而不是 1。

由于缺乏经验,我不太明白如何派生这样一个类B(我应该这样做,也许最好将它写成一个模仿A 实现的新类? ) 来自类A 的函数,我要重写的函数是基类的private 成员。

谢谢

【问题讨论】:

  • 如果不修改 A 就无法做到这一点。
  • 你可以让这个数字成为类(或函数)的模板参数
  • C++ 提供了一种叫做“封装”的东西,这意味着A 的设计者/编码者可以通过客户端代码来决定可能的定制,而number 并不是其中之一。通过封装,A 的维护者可以推断可能的客户端代码依赖关系:他们知道他们可以重命名、删除或更改 number 而不会破坏任何客户端代码。如果客户端代码有某种方式依赖于这些实现细节,那么库维护者将不得不检查所有客户端使用情况,以便在每次更改之前进行影响研究和客户端代码重写。
  • 如果您无法修改该课程,则您必须提供自己的替代品,或向供应商提交票证,以便为您修改课程。

标签: c++ inheritance constructor private


【解决方案1】:

简短的回答是,这不能在 C++ 中完成。派生类可以覆盖其基类所做的主要机制是虚函数。除非基类定义了虚函数,否则派生类无法覆盖它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2014-11-27
    • 2017-08-07
    相关资源
    最近更新 更多