C++;-多级遗传 我是C++新手,这是我第一次学习继承。关于多级继承,我有一些困惑,我想讨论一下
考虑以下代码:C++;-多级遗传 我是C++新手,这是我第一次学习继承。关于多级继承,我有一些困惑,我想讨论一下,c++,inheritance,multi-level,C++,Inheritance,Multi Level,考虑以下代码: 类父类 { ... 虚拟void foo(){…}//虚拟函数 ... } 班童 :公共家长 { ... 虚拟void foo()重写{…}//1 ... } 班孙 :公共儿童 { ... void foo()重写{…}//2 ... } 现在, 我知道1重写Parentclass方法 但是,我不确定2。它覆盖了哪个方法,父对象中的方法还是子对象中的方法 如果我错了,请纠正我。另外,如果有任何关于这方面的有用文章,请向我咨询。我想说,这里的类孙子覆盖了子方法。然而,这并不是一个
类父类
{
...
虚拟void foo(){…}//虚拟函数
...
}
班童
:公共家长
{
...
虚拟void foo()重写{…}//1
...
}
班孙
:公共儿童
{
...
void foo()重写{…}//2
...
}
现在,
1
重写Parent
class方法2
。它覆盖了哪个方法,父对象中的方法还是子对象中的方法如果我错了,请纠正我。另外,如果有任何关于这方面的有用文章,请向我咨询。我想说,这里的类
孙子
覆盖了子
方法。然而,这并不是一个非常有用的区别,因为孙辈继承自子代
和父代
(间接)。因此,您可以执行以下所有操作:
intmain(){
父项*p1=新的子项();
p1->foo();//调用Child::foo
父*p2=新的孙子();
p2->foo();//调用孙子::foo
Child*c=新孙辈();
c->foo();//调用孙子::foo
//清除所有指针
}
我想说,这里的类孙子
覆盖了子
方法。然而,这并不是一个非常有用的区别,因为孙辈继承自子代
和父代
(间接)。因此,您可以执行以下所有操作:
intmain(){
父项*p1=新的子项();
p1->foo();//调用Child::foo
父*p2=新的孙子();
p2->foo();//调用孙子::foo
Child*c=新孙辈();
c->foo();//调用孙子::foo
//清除所有指针
}
如果你展示真实的代码会更容易。特别是,不清楚你在第4节中的意思。代码发布后,不可能看到任何效果。另外,请每个问题问一个问题。如果你展示真实的代码,这会更容易。特别是,不清楚你在第4节中的意思。代码发布后,不可能看到任何效果。另外,请每个问题问一个问题如果我将子类中的声明更改为void foo()override{…}
,会怎么样?Child::foo()
对于sunder
类意味着什么。Nothing——不管实际实例的类型是什么,都将调用哪个方法。只要最顶层的类在其签名中有virtual
,这一点就很重要:具有相同名称的所有派生方法都会自动virtual
。事实上,如果使用override
不是virtual
,则会出现错误。如果我将Child
类中的声明更改为void foo()override{…}
?Child::foo()
对于sunder
类意味着什么。Nothing——不管实际实例的类型是什么,都将调用哪个方法。只要最顶层的类在其签名中有virtual
,这一点就很重要:具有相同名称的所有派生方法都会自动virtual
。事实上,如果不是虚拟的,那么使用覆盖
会给您一个错误。