gpt4 book ai didi

c++ - 什么时候在派生类中实际需要 "virtual"属性?

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:58 25 4
gpt4 key购买 nike

我试图了解应该在何时何地编写“virtual”关键字,以便给定类的任何后代启用多态行为,因为我在其他地方找不到关于这个问题的具体信息。

对于我所尝试的,在基类中的函数上使用 virtual 会自动使该函数对于任何后代都是虚拟的。然而,互联网上的许多片段经常在后代中再次声明这些功能是虚拟的。

struct A {
virtual void foo1() { std::cout << "[A] foo1.\n"; }
virtual void foo2() { std::cout << "[A] foo2.\n"; }
};
struct B : public A {
virtual void foo1() { std::cout << "[B] foo1.\n"; }
void foo2() { std::cout << "[B] foo2.\n"; }
};

用 g++ 编译这段代码,我发现 foo1 和 foo2 都具有多态行为。此外,即使我再次从 B 派生并创建一个 C 类,并且我在没有使用 virtual 关键字的情况下再次实现 foo2,foo2 仍然使用 v-table。

在派生类中使用 virtual 关键字只是为了清晰和 self 记录,还是有一些我不知道的其他影响?

最佳答案

对于我所尝试的,在基类中的函数上使用 virtual 会自动使该函数对于任何后代都是 virtual。

这是真的,子方法自动继承了父方法的性。

人们在子类中重申 virtual 作为一种约定,只是为了明确表明子类打算覆盖虚拟方法(尽管我们在 C++11 中有 override) .

关于c++ - 什么时候在派生类中实际需要 "virtual"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339089/

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