【问题标题】:Is function overloading without virtual function also Run time polymorphism没有虚函数的函数重载也是运行时多态吗
【发布时间】:2015-09-22 19:35:03
【问题描述】:

我知道如何使用虚函数来实现RT多态性。通过使用基类引用并将派生类对象存储在其中。然后使用此引用调用覆盖的方法。 但这也是真的吗?

class Base
{
 public:
 void show();
 {
  cout << "Base class\t";
 }
};
class Derived:public Base
{
 public:
 void show()
 {
  cout << "Derived Class";
 }
}

int main()
{
 Base b;       //Base class object
 Derived d;     //Derived class object
 d.show();   // is this run time polymorphism??
}

//输出:派生类

【问题讨论】:

  • 它不是(不能是)运行时多态性,因为在编译期间仅根据类型信息确定确切的方法。不涉及运行时调度。
  • 所以这甚至不是方法覆盖?我从studytonight.com/cpp/function-overriding.php 得到了代码,请告诉我这个覆盖示例是否错误地放在了网站中
  • 这被称为Function Hiding
  • @user2864740 非常感谢。这消除了我的疑虑。

标签: polymorphism runtime virtual


【解决方案1】:

不,不是。因为这个

 Derived d;
 Base *b = &d;
 b->show();

打印

Base class

而对于运行时多态性,它会打印

Derived Class

您的示例中没有多态性,因为对象的确切类型在调用站点是已知的。您还隐藏了基本函数,而不是覆盖或重载它。

【讨论】:

  • 因为你必须将base中的show方法声明为virtual。我在这里要问的是使用派生类obj来调用重写的方法作为RT多态
  • 代码有多态性。我认为。这是一个简单的函数覆盖示例。并且函数覆盖被认为是多态权
  • @SaurabhKumar:不,它不是压倒一切的。
  • @SaurabhKumar:多态性是代码可以根据对象的确切类型做不同事情的场景,而对象的确切类型在代码中是未知的。静态多态是在模板实例化时确定类型,动态是在运行时通过 vtable 确定类型。它与覆盖无关。
  • 可能你们俩都是对的。我从这个网站阅读了代码:studytonight.com/cpp/function-overriding.php如果网站中的信息有误,请告诉我
猜你喜欢
  • 2018-07-11
  • 2013-12-09
  • 1970-01-01
  • 2017-08-06
  • 2023-01-07
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多