首頁 >後端開發 >C++ >C++ 內嵌函數與虛擬函數的異同

C++ 內嵌函數與虛擬函數的異同

王林
王林原創
2024-04-17 09:39:01900瀏覽

內聯函數將函數體嵌入呼叫點,提升效能和程式碼體積,但可讀性較低;虛擬函數透過多態性呼叫子類覆寫的函數,提高靈活性,但運行時開銷較高。

C++ 内联函数与虚拟函数的异同

C 內聯函數與虛擬函數的異同

#內聯函數

##內聯函數是編譯器在呼叫時將函數體嵌入到呼叫點,而不是執行函數呼叫過程的函數。

優點:

    提升效能:避免呼叫開銷。
  • 減少程式碼體積:函數體不會重複出現在多個呼叫點。

缺點:

    編譯時間增加:需要為每個呼叫點編譯函數體。
  • 程式碼可讀性下降:函數體分散在整個程式碼庫中。

語法:

inline int sum(int a, int b) {
  return a + b;
}

虛擬函數

虛擬函數是透過繼承機制實現多態性的函數。當呼叫父類別物件上的虛擬函數時,實際呼叫的函數由物件的動態類型決定。

優點:

    實作多型性:子類別可以重寫父類別的虛擬函數。
  • 提高程式碼的可擴充性和靈活性。

缺點:

    運行時開銷:需要維護虛擬函數表和間接呼叫。
  • 程式碼複雜度增加:需要使用
  • virtualoverride 關鍵字。

語法:

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

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

異同比較:

特徵內聯函數虛擬函數#呼叫機制函數體嵌入 #間接呼叫效能更高較低#更小更大可讀性

#低較高

多態性

###不支援######支援###################實戰案例:###### ###可以用內嵌函數實作簡單的數學運算,例如求和:###
inline int sum(int a, int b) {
  return a + b;
}

int main() {
  std::cout << sum(1, 2) << std::endl;  // 输出:3
}
###可以用虛擬函數實作圖形繪製介面:###
class Shape {
 public:
  virtual void draw() = 0;
};

class Circle : public Shape {
 public:
  virtual void draw() override {
    std::cout << "Drawing a circle" << std::endl;
  }
};

int main() {
  Shape* shape = new Circle();
  shape->draw(); // 输出:Drawing a circle
}

以上是C++ 內嵌函數與虛擬函數的異同的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn