我有一个基于这个问题的问题
在 http://www.parashift.com/c%2B%2B-faq-lite/private-inheritance.html#faq-24.3部分 中提到了以下内容:
私有继承的合法长期用途是当您想要构建一个使用类 Wilma 中的代码的类 Fred 时,并且来自类 Wilma 的代码需要调用来自您的新类 Fred 的成员函数。在这种情况下,Fred 调用 Wilma 中的非虚函数,而 Wilma 调用自身(通常是纯虚函数),它们被 Fred 覆盖。这将更难与组合。
但是,我想知道为什么使用公共继承不会达到同样的效果。即下面的c#代码做同样的事情..
class Wilma
{
protected void FredCallsWilma() {
Console.Write("Fred Calls Wilma ;");
WilmaCallsFred();
}
protected virtual void WilmaCallsFred() {}
}
class Fred : Wilma
{
public void barney(){
Console.Write("barney;");
FredCallsWilma();
}
protected override void WilmaCallsFred(){
Console.Write("Wilma Calls Fred ;");
}
}
class Program
{
static void Main(string[] args){
Fred f1 = new Fred();
f1.barney();
}
}
它打印
巴尼;弗雷德打电话给威尔玛;威尔玛给弗雷德打电话
那么在 c++ faq lite 中引用的私有继承有什么特别之处。用公共继承代替私有继承会不会很好地达到这个结果?