【发布时间】: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