我有一个函数,两个派生类使用,但第三个没有,将它留在基类中是否有意义,即使 3 个派生类之一不使用它?
我能想到的禁止第三类的唯一方法是基本上创建一个从基类派生的中间类,然后使用公共函数的 2 从第二类派生。
是否可以阻止第三类使用该功能,同时让应该使用它的两个使用它?
这是否似乎太过分了,我的意思是只要我不“尝试”从第三类调用函数,这应该不是问题,我只是对是否有办法阻止这一切感兴趣在一起没有很多麻烦。
我有一个函数,两个派生类使用,但第三个没有,将它留在基类中是否有意义,即使 3 个派生类之一不使用它?
我能想到的禁止第三类的唯一方法是基本上创建一个从基类派生的中间类,然后使用公共函数的 2 从第二类派生。
是否可以阻止第三类使用该功能,同时让应该使用它的两个使用它?
这是否似乎太过分了,我的意思是只要我不“尝试”从第三类调用函数,这应该不是问题,我只是对是否有办法阻止这一切感兴趣在一起没有很多麻烦。
没有办法直接做到这一点。基本上,当您进行子类化时,您是在说子类是基类的更具体的版本。
在这种情况下,您试图说“子类是基类的更具体的版本except for the fact that it shouldn't be able to touch XXX
”。从本质上讲,这违反了里氏替换原则。
处理这个问题的最好方法是在你的层次结构中添加第二个基类,我相信你提到的解决方案。
基本上,使您的层次结构:
base
| \---- subclass without feature available
|
\--base+feature
\--subclass one with specific feature
\--subclass two with specific feature
您可以将此功能设为虚拟。然后重写第 3 类中的函数并抛出异常。它将阻止开发人员在第三类中使用该功能。