繁体   English   中英

修改派生类中的函数并通过派生类对象本身访问它是运行时多态性的一个例子

[英]Is modifying a function in derived class and accessing it by derived class object itself an example of runtime polymorphism

我正在网上阅读有关函数覆盖运行时多态性的信息。

在阅读时,我发现了一个在programiz上覆盖函数的示例,其中给出了以下示例:

// C++ program to demonstrate function overriding

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1;
    derived1.print();
    return 0;
}

输出

Derived Function

Derived类中,我们修改了Base类的print()函数,并由派生类的对象derived1访问。

一个问题一直萦绕在我的脑海中——这也是运行时多态性的一个例子吗? 或运算符覆盖并不总是属于运行时多态性,因为我在某处读过这个

虚函数的主要用途是实现运行时多态性。运行时多态性只能通过基类类型的指针(或引用)来实现。

因此,我的问题是——“这是运行时多态性的一个例子吗,因为它不使用virtual关键字,而是涉及一个指向基类的指针,甚至是一个函数覆盖的例子?

如果我提到任何错误,请纠正我。

这不是运行时多态性。

该站点也没有声明,但它错误地使用了术语“覆盖”(或者至少没有使用通常的技术含义)。 只能覆盖virtual函数,然后覆盖提供运行时多态性。

该站点演示的只是类成员的(编译时静态)名称查找规则。 没有多态性或覆盖。 C++ 只允许在不同的命名空间和类中具有相同名称的实体,并且有关于如何决定给定表达式名称中的哪些实体的规则。 这些实体根本不相关。 例如,您可以有一个静态数据成员static int mem; 在基类和非静态成员函数中void mem(); 在派生类中。 如果你写obj.mem它将是静态数据成员(如果obj静态类型是基类)或非静态成员函数(如果obj静态类型是派生类)。 这些显然彼此无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM