gpt4 book ai didi

C++ 声明

转载 作者:行者123 更新时间:2023-11-30 03:08:30 32 4
gpt4 key购买 nike

我有一个类“Cat”和 Cat 类的一个子类“DerivedCat”。 Cat 有一个函数 meow(),而 DerivedCat 覆盖了这个函数。

在应用程序中,我声明了一个 Cat 对象:

Cat* cat;

稍后在应用程序中,我初始化 Cat 实例:

cat = new DerivedCat();
  1. 调用了哪个“meow()”?为什么?
  2. 像这样声明为父类(super class)类型有什么好处?
  3. 我想在哪里做这个的例子是什么?

最佳答案

假设你的意思是 Cat * cat;,这取决于 meow 方法是否是虚拟的:

  • 如果是虚拟的,将使用DerivedCat中的定义。
  • 如果不是虚拟的,将使用 Cat 中的实现。

在 Java 中,所有非静态方法默认都是虚拟的。这通常是您想要的。然而,虚拟方法可以在运行时增加性能开销以确定调用哪个实现(例如 vtable 中的查找)。即使您从不创建子类,您可能仍然需要为此性能开销付出代价。 C++ 的目标之一是生成高性能代码,因此默认情况下所有方法都是非虚拟的。

关于C++ 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915204/

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