gpt4 book ai didi

c++ - 重写方法时,virtual 关键字是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 23:12:02 24 4
gpt4 key购买 nike

virtual 关键字在重写方法时有什么作用?我没有使用它,一切正常。

每个编译器在这方面的行为是否相同?

我应该使用它还是不使用它?

最佳答案

没有它,您无法覆盖成员函数。

你只能隐藏一个。

struct Base {
void foo() {}
};

struct Derived : Base {
void foo() {}
};

Derived::foo 确实 not 覆盖 Base::foo;它只是隐藏它,因为它具有相同的名称,如下所示:

Derived d;
d.foo();

调用 Derived::foo.

virtual 启用多态性,以便您实际上覆盖函数:

struct Base {
virtual void foo() {}
};

struct Derived : Base {
virtual void foo() {} // * second `virtual` is optional, but clearest
};

Derived d;
Base& b = d;
b.foo();

这会调用 Derived::foo,因为它现在 覆盖 Base::foo — 你的对象是多态的。

(由于the slicing problem,您还必须为此使用引用或指针。)


  • Derived::foo 不需要重复 virtual 关键字,因为 Base::foo 已经使用了它。这是由标准保证的,您可以依赖它。不过,为了清楚起见,有些人认为最好保留这一点。

关于c++ - 重写方法时,virtual 关键字是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397356/

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