【发布时间】:2011-01-05 18:53:14
【问题描述】:
我有一个基于this问题的问题
在该部分 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 中引用的私有继承有什么特别之处。用公共继承代替私有继承会不会很好地达到这个结果?
【问题讨论】: