当前位置: 首页 > 知识库问答 >
问题:

C语言中的‘override’关键字是用来做什么的?[重复]

宋鸿德
2023-03-14

未解决原始关闭原因

我是一个C语言初学者。我遇到过在我正在处理的头文件中使用的< code>override关键字。我可以知道,什么是真正使用< code>override,也许用一个例子就容易理解了。

共有3个答案

弘涛
2023-03-14

<code>override</code>是一个C 11关键字,表示方法是基类方法的“override”。考虑以下示例:

class Foo
{
public:
    virtual void func1();
};

class Bar : public Foo
{
public:
    void func1() override;
};

如果B::func1()签名不等于A::func1()签名,将生成编译错误,因为B::func1()没有覆盖A::func1(),它将定义一个名为的新方法。

华涵意
2023-03-14
匿名用户

作为所有答案的附录,仅供参考:< code>override不是一个关键字,而是一种特殊的标识符!它只在声明/定义虚函数的上下文中有意义,在其他上下文中它只是一个普通的标识符。有关详细信息,请阅读标准的2.11.2。

#include <iostream>

struct base
{
    virtual void foo() = 0;
};

struct derived : base
{
    virtual void foo() override
    {
        std::cout << __PRETTY_FUNCTION__ << std::endl;
    }
};

int main()
{
    base* override = new derived();
    override->foo();
    return 0;
}

输出:

zaufi@gentop /work/tests $ g++ -std=c++11 -o override-test override-test.cc
zaufi@gentop /work/tests $ ./override-test
virtual void derived::foo()

尹欣怿
2023-03-14

< code>override关键字有两个用途:

    < li >它向代码的读者显示“这是一个虚方法,即重写基类的虚方法。” < li >编译器也知道它是一个覆盖,所以它可以“检查”您没有更改/添加您认为是覆盖的新方法。

要解释后者:

class base
{
  public:
    virtual int foo(float x) = 0; 
};


class derived: public base
{
   public:
     int foo(float x) override { ... } // OK
};

class derived2: public base
{
   public:
     int foo(int x) override { ... } // ERROR
};

 类似资料:
  • 在为android开发时,我有时会遇到类似这样的事情: 我不明白关键字有什么意义。

  • 本文向大家介绍什么是C语言的字谜?,包括了什么是C语言的字谜?的使用技巧和注意事项,需要的朋友参考一下 字谜字符串只不过是在另一个字符串中出现相同次数的所有字符,我们称之为字谜。 用户输入两个字符串。我们需要计算每个字母(“ a”至“ z”)出现在其中的次数,然后比较它们相应的计数。字符串中字母的出现频率是它出现在其中的次数。 如果两个字符串对特定字母的频率计数相同,那么我们可以说这两个字符串是字

  • 未解决原始关闭原因 关键字虚拟允许派生类在需要多态的情况下覆盖,这可以在有或没有关键字覆盖的情况下关闭。添加覆盖如何影响程序? 示例代码:

  • 本文向大家介绍详解C语言中const关键字的用法,包括了详解C语言中const关键字的用法的使用技巧和注意事项,需要的朋友参考一下 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理,所以说const的存在一定有它的合理性,与预编译指令相比,cons

  • 主要内容:文件流我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。 在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。例如: 通常把显示器称为标准输出文件,printf 就是向这个文件输出数据; 通常把键盘称为标准输入文件,scanf 就是从这个文件读取数

  • 我对“作为”关键词的用法感到困惑。 它是强制转换运算符还是别名运算符? 我在互联网上遇到了以下代码,看起来像一个演职人员: 这是什么意思?