自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++ 靜態(tài)成員函數(shù)能不能被繼承?你知道嗎?

開發(fā) 前端
靜態(tài)成員函數(shù)對比普通函數(shù)有點特殊,靜態(tài)成員函數(shù)是屬于類本身的,而不是類的對象??梢酝ㄟ^類名直接調用靜態(tài)成員函數(shù),而無需創(chuàng)建類的實例(對象)。

在C++中,靜態(tài)成員函數(shù)可以被繼承?!?/span>

寫個簡單的代碼驗證: 

圖片圖片

靜態(tài)成員函數(shù)對比普通函數(shù)有點特殊,靜態(tài)成員函數(shù)是屬于類本身的,而不是類的對象??梢酝ㄟ^類名直接調用靜態(tài)成員函數(shù),而無需創(chuàng)建類的實例(對象)。靜態(tài)成員函數(shù)通常用來操作類的靜態(tài)成員變量,靜態(tài)成員變量也是屬于類本身的,不需要通過對象來訪問。 

比如: 

class MyClass {
public:
    static int counter; // 靜態(tài)成員變量
    static void increment() { // 靜態(tài)成員函數(shù)
        counter++;
    }
};

靜態(tài)成員函數(shù)可以是Virtual嗎? 

不行!因為兩者設計機制就是相悖的 

虛函數(shù)的核心特性是在運行時動態(tài)決定調用哪個版本的函數(shù)(即動態(tài)綁定)。這是通過虛函數(shù)表(vtable)來實現(xiàn)的。虛函數(shù)表保存著類的虛函數(shù)地址,程序運行時,基類或派生類的指針或引用會根據對象的實際類型(而不是聲明的類型)來調用對應的虛函數(shù)版本。這就是所謂的多態(tài)?!?/span>

為了實現(xiàn)這一點,虛函數(shù)需要依賴實例,即每個對象都有一個與其類型相關的虛函數(shù)表。在調用虛函數(shù)時,程序通過對象的虛函數(shù)表來決定調用哪個函數(shù)版本。 

靜態(tài)成員函數(shù)是與類本身綁定的,而不是與類的實例綁定。靜態(tài)成員函數(shù)沒有 this 指針,也就無法訪問對象的實例成員。 

靜態(tài)成員函數(shù)的調用通過類名直接訪問,而不是通過對象指針或引用。這意味著靜態(tài)成員函數(shù)的調用和虛函數(shù)機制的工作方式是完全不同的?!?/span>

所以靜態(tài)成員函數(shù)不參與多態(tài):靜態(tài)成員函數(shù)的調用是通過類本身而不是通過對象進行的,因此不涉及動態(tài)綁定。虛函數(shù)的目的是支持多態(tài),而靜態(tài)成員函數(shù)的設計則與這種機制不兼容。 

靜態(tài)成員函數(shù)可以重寫嗎?

不行!

靜態(tài)成員函數(shù)是可以被繼承的,派生類會繼承這個靜態(tài)成員函數(shù),但不能對其進行重寫。因為靜態(tài)成員函數(shù)和類的實例無關,它們是與類本身綁定的,而不是和對象的狀態(tài)綁定?!?/span>

如果在派生類中定義一個與基類同名的靜態(tài)成員函數(shù),那么這只是一個隱藏了基類的靜態(tài)函數(shù),而不是重寫。換句話說,它并不會改變基類靜態(tài)成員函數(shù)的行為。 

class Base {
public:
    static void showMessage() {
        std::cout << "Base class message" << std::endl;
    }
};

class Derived : public Base {
public:
    static void showMessage() {
        std::cout << "Derived class message" << std::endl;
    }
};

int main() {
    Base::showMessage();   // 輸出:Base class message
    Derived::showMessage(); // 輸出:Derived class message
    Base* b = new Derived();
    b->showMessage();      // 輸出:Base class message,因為靜態(tài)函數(shù)與對象無關
    return 0;
}

輸出結果驗證 

b->showMessage();輸出還是Base的而不是子類的。

圖片

總結 

靜態(tài)成員函數(shù)可以被繼承:派生類可以繼承基類的靜態(tài)成員函數(shù),但靜態(tài)函數(shù)本身與對象無關,不能在派生類中重寫?!?/span>

不能進行重寫:靜態(tài)成員函數(shù)不支持重寫,因為它們是屬于類本身,而不是對象實例。 

通過類名調用:靜態(tài)成員函數(shù)需要通過類名來調用,可以通過基類或派生類來調用。

責任編輯:武曉燕 來源: CppPlayer
相關推薦

2022-03-10 23:25:34

電腦系統(tǒng)維修

2010-01-21 14:28:03

C++靜態(tài)成員函數(shù)

2013-04-19 10:42:02

打車軟件大數(shù)據

2010-02-04 10:08:00

C++靜態(tài)成員函數(shù)

2016-12-26 09:23:18

C++函數(shù)覆蓋

2018-02-06 09:40:25

PythonOOP繼承

2010-01-21 14:19:44

C++靜態(tài)成員

2023-07-04 08:48:24

靜態(tài)代碼分析工具

2022-12-09 08:22:26

Gradle編譯運行

2010-01-18 18:04:28

靜態(tài)成員

2010-01-28 16:42:29

C++靜態(tài)成員

2024-05-28 09:12:10

2024-04-07 00:00:00

ESlint命令變量

2025-01-10 11:53:11

2022-12-06 10:04:59

5G網絡C波段

2011-05-24 16:58:52

CC++

2023-12-12 08:41:01

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

2023-04-26 10:21:04

點贊
收藏

51CTO技術棧公眾號