gpt4 book ai didi

c++ - C++虚拟定义是否自动继承?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:59 24 4
gpt4 key购买 nike

C++虚定义是递归的吗?考虑

class Foo
{
public:
virtual void a()=0;
};

class Bar:public Foo
{
public:
void a()
{
//...
}
};

如果我现在继承 Bar 并再次重载 a,那 a 是否也是多态的?

递归的意思是

Given a class A that has a virtual member a, and a virtual member of the n:th subclass of A, then a is also a virtual member of the n+1:th subclass, for all n.

也就是说,虚函数遵循 Peanos 归纳公理并且在一级之后不终止。

最佳答案

如果你继承自 Bar 你应该有

class Bar:public Foo
{
public:
virtual void a() override
{
//...
}
};

所以你在这里说了关于 a() 的两件事:

  1. 该函数是虚函数,因此任何派生自 Bar 的函数都会将该函数视为虚函数
  2. 您正在覆盖基类 Foo 中的函数 a

作为@MikeSeymour@Bathsheba提到过,Bar 中的 virtual 关键字是多余的,因为该函数将被视为 virtual,因为它位于基类中。但是,我倾向于使用 virtual/override 的习惯,如我的示例所示,因此第一眼就很清楚这个函数是如何使用的类而不必走上继承。

关于c++ - C++虚拟定义是否自动继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com