C++ 中的函數覆蓋解釋

已發表: 2022-11-09

目錄

什麼是函數?

函數是屬於代碼的一塊,用於在程序中執行規定的任務。 重要的是擁有有關繼承的第一手知識來學習函數覆蓋繼承實現是這個函數的任務。 C++ 函數是為執行任務而組合在一起的語句集合。 所有程序都有一個 main() 函數,並且特定程序有附加函數。 函數聲明將函數名、返回類型和參數發送給編譯器,以通過函數定義確定函數體。 函數可以是過程、方法或子例程,所有 C++ 函數都由標頭和主體組成。

C++ 函數的語法:-

return_type function_name(參數列表) {

功能體

}

組件:-

  • 返回類型 -這表示函數的返回值類型。
  • 函數名稱 -這表示構成函數簽名和參數列表的函數名稱。
  • 參數- 這是函數返回值的佔位符。 調用函數時,傳遞給參數的值稱為實際參數。
  • 函數體 - 函數體包含定義函數任務的語句列表。

如何調用函數

必須在使用前調用或調用函數,然後將控制權轉移給它以執行必要的任務。 在此之後,return 語句將控制權交還給主程序。 必須傳遞參數和函數名才能調用函數。 參數可以在調用時以多種方式傳遞給函數。 來電類型如下:-

  • 按值調用
  • 通過引用調用
  • 指針調用

從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

C++ 中的函數覆蓋

C++ 覆蓋是一個想法,通過它定義給定相同名稱的函數。 重寫中的基類函數在派生類中重新定義,它重寫了基類函數。 實現運行時多態也可以定義為函數覆蓋。 在這裡,程序的運行時覆蓋了函數。

函數覆蓋允許程序員使用在其父類中找到的子類中的函數。 結果,子類繼承了父類中的每個數據成員和成員函數。 要覆蓋任何子類功能,您必須實現函數覆蓋。 函數覆蓋是指在子類中製作一個新版本的父類函數。

在 C++ 中實現函數覆蓋的語法

當使用派生類中的對象調用在基類和派生類中定義的相同函數時,它會執行派生類函數。 這是 C++ 中的函數覆蓋。

下面是在 C++ 中實現函數覆蓋的最常用語法:

// 用於演示函數覆蓋的 C++ 程序

#include <iostream>

使用命名空間標準;

類基{

上市:

無效打印(){

cout << “基本函數” << endl;

}

};

派生類:公共基礎{

上市:

無效打印(){

cout << “派生函數” << endl;

}

};

int main() {

派生派生1;

派生1.print();

返回0;

}

輸出

派生函數

這重新定義了派生類中的基類函數。 因此,返回類型、function_parameters 和 function_name 必須相同才能實現函數覆蓋。

軟件工程的熱門課程和文章

熱門節目
軟件開發執行 PG 計劃 - IIIT B 區塊鏈證書課程 - PURDUE 網絡安全證書計劃 - PURDUE 計算機科學理學碩士 - IIIT B
其他熱門文章
2021-22年美國雲工程師薪水 美國 AWS 解決方案架構師薪水 美國後端開發人員工資 美國前端開發人員薪水
美國網絡開發人員的薪水 2022 年 Scrum Master 面試問題 如何在 2022 年開始網絡安全職業? 工程專業學生在美國的職業選擇

函數覆蓋在 C++ 中的工作原理

OOP 必須允許派生類繼承父類的特性。 函數重寫使程序員能夠在特定派生類中重寫類中的任何功能。 當子類需要其功能變體時,這尤其有用。

下面是一個簡單的 C++ 函數覆蓋示例,以便您更好地理解:

#include <iostream>

使用命名空間標準;

類父類

{

上市:

虛空打印()

{

cout << “\n這是 print() 方法”

“基類”;

}

};

類派生類:公共父類

{

上市:

// 函數覆蓋——新定義

// 基類的打印方法

無效打印()

{

cout << “\n這是 print() 方法”

”派生類”;

}

};

// 驅動代碼

主函數()

{

派生類對象;

obj.print();

}

訪問 C++ 中的重寫函數

範圍解析運算符用於訪問 C++ 中基類的重寫函數。 也可以通過使用基類指針指向派生類的對象,然後從指針調用函數來訪問被覆蓋的函數。

// 訪問重寫函數的 C++ 程序

// 在 main() 中使用範圍解析運算符 ::

#include <iostream>

使用命名空間標準;

類基{

上市:

無效打印(){

cout << “基本函數” << endl;

}

};

派生類:公共基礎{

上市:

無效打印(){

cout << “派生函數” << endl;

}

};

int main() {

派生派生1,派生2;

派生1.print();

// 訪問 Base 類的 print() 函數

派生2.Base::print();

返回0;

}

輸出

派生函數

基本功能

語法中的語句; 派生2.Base::print(); 可以訪問 Base 類的 print() 函數。

從派生類調用重寫函數

您可以使用繼承來更改函數的行為。 但是,有時,您不需要更改或替換基類/父類功能。 相反,必須添加更多功能。

下面是使用派生類中的調用覆蓋函數的示例。

// C++ 程序調用被覆蓋的函數

// 來自派生類的成員函數

#include <iostream>

使用命名空間標準;

類基{

上市:

無效打印(){

cout << “基本函數” << endl;

}

};

派生類:公共基礎{

上市:

無效打印(){

cout << “派生函數” << endl;

// 調用被覆蓋的函數

基::打印();

}

};

int main() {

派生派生1;

派生1.print();

返回0;

}

輸出

派生函數

基本功能

在這個程序中,已在 Derived 類中調用了被覆蓋的函數。

派生類:公共基礎{

上市:

無效打印(){

cout << “派生函數” << endl;

基::打印();

}

};

代碼 Base::print();,調用 Derived 類中的重寫函數。

函數重載與函數覆蓋

您可以在編譯時實現函數重載,通常在派生類和基類中完成。 它通過更改每個函數的簽名(如數據類型或參數的返回類型)來提供多個函數定義。

另一方面,函數覆蓋可以在運行時實現。 重寫中的基類在派生類中重新定義,具有相同的參數和相同的返回類型。 讓我們找出哪些其他功能使這兩個功能不同。

覆蓋重載
遺產需要類繼承不需要類繼承
函數簽名簽名的類型或參數數量不同。 函數簽名保持不變
功能範圍功能範圍不同擁有相同的範圍
函數行為當派生類函數的執行方式與基類函數不同或具有附加功能時,這是必需的。 當具有相同名稱的函數根據給定的參數具有不同的行為時需要。

結論

C++ 中的函數覆蓋有助於節省內存空間並保持任何代碼的可讀性和一致性。 它還有助於使代碼易於重用。 不用說,如果您在編程中看到自己的未來,那麼有關函數覆蓋的知識是一項重要的技能。

如果您想加入可靠且優質的課程以開始您在該領域的職業生涯,您可以在 upGrad 上註冊upGrad 的計算機科學理學碩士。 該計劃的一些主要亮點如下:-

  • 學習 MERN Stack、微服務、JavaScript 等。
  • Cloud Labs 上的有益學習
  • 試用 Netflix、LinkedIn、Facebook 等上使用的工具。
  • 熟練掌握 10 多種編程工具和語言
  • 24/7 學生支持

函數覆蓋是如何發生的?

函數 C++ 覆蓋通過繼承發生,即當一個類繼承另一個類時。 當派生類和基類擁有具有相同返回類型、名稱和參數列表的成員函數時,稱為函數覆蓋。

C ++中的函數重載和函數覆蓋有什麼區別?

當函數在基類和派生類中擁有相同的原型時,就會發生函數覆蓋。 當一個類中存在多個具有相似名稱的函數時,會執行函數重載。

C++中函數重載的特點是什麼?

C++ 中的函數重載主要用於提高代碼的可讀性。 程序員使用它,因此他們不必記住大量的函數名稱。 具有多個函數、不同參數且名稱相同的類稱為重載。