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
    。事实上,如果不是虚拟的,那么使用
    覆盖
    会给您一个错误。