簡體   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