Java轉C++之編程范式

1. 過程式編程(Procedural Programming)

在 C++ 中的表現

過程式編程是通過一系列的函數調用來實現程序的功能。函數是核心構建單元,數據和操作通過函數進行交互。

  • C++ 中:可以使用普通的函數和全局變量來進行過程式編程。
  • Java 中:雖然 Java 是面向對象的,但你可以通過 static 方法模擬過程式編程。
示例:
#include <iostream>
using namespace std;void add(int a, int b) {cout << "Sum: " << a + b << endl;
}int main() {int x = 10, y = 20;add(x, y);return 0;
}

在這個 C++ 示例中,add 函數像 Java 中的 static 方法一樣,執行了某個操作,沒有面向對象的封裝。


2. 面向對象編程(Object-Oriented Programming, OOP)

在 C++ 中的表現

C++ 作為一種強大的面向對象編程語言,支持四大基本特性:封裝繼承多態抽象。這與 Java 中的 OOP 范式非常相似,但 C++ 中可以直接訪問底層內存,并且支持多重繼承、指針等特性。

  • C++ 中

    • 支持類和對象
    • 支持構造函數、析構函數、虛函數
    • 支持多重繼承
    • 支持指針和引用
  • Java 中:Java 是純粹的面向對象語言,每個類都是對象,但不支持多重繼承(通過接口來解決)。

示例:
#include <iostream>
using namespace std;class Shape {
public:virtual void draw() = 0;  // 純虛函數,接口virtual ~Shape() {}        // 虛析構函數,確保正確釋放資源
};class Circle : public Shape {
public:void draw() override {cout << "Drawing Circle" << endl;}
};class Square : public Shape {
public:void draw() override {cout << "Drawing Square" << endl;}
};int main() {Shape* shape1 = new Circle();Shape* shape2 = new Square();shape1->draw();  // Drawing Circleshape2->draw();  // Drawing Squaredelete shape1;delete shape2;return 0;
}

在這個 C++ 示例中,Shape 是抽象類,CircleSquare 類從 Shape 派生,并實現 draw 方法。這與 Java 中的繼承和多態非常相似,但 C++ 通過虛函數來實現動態綁定。


3. 泛型編程(Generic Programming)

在 C++ 中的表現

C++ 提供了強大的模板(template)機制,可以通過模板編寫通用代碼,這與 Java 中的泛型編程非常相似,但 C++ 中的模板支持更豐富的編譯時計算和類型推導。

  • C++ 中:模板支持函數模板和類模板,可以通過模板元編程進行復雜的編譯時計算。
  • Java 中:泛型主要用于提供類型安全,編譯時會進行類型擦除,但無法像 C++ 一樣進行編譯時的類型計算。
示例:
#include <iostream>
using namespace std;// 模板函數
template <typename T>
T add(T a, T b) {return a + b;
}int main() {cout << add(10, 20) << endl;      // 輸出 30cout << add(1.5, 2.5) << endl;    // 輸出 4return 0;
}

在這個例子中,add 是一個模板函數,可以接受任意類型的參數,C++ 編譯器會在編譯時根據傳入的類型生成相應的函數版本。Java 中的泛型也可以實現類似的功能,但 C++ 的模板更加靈活,能夠在編譯時進行更多的計算和類型推導。


4. 函數式編程(Functional Programming)

在 C++ 中的表現

C++ 支持函數式編程的一些特性,比如 Lambda 表達式高階函數,這使得你可以像 Java 中的函數式編程風格(例如使用 Stream API)一樣,進行更簡潔和聲明式的編程。

  • C++ 中

    • Lambda 表達式可以創建匿名函數,允許你傳遞函數作為參數。
    • 高階函數支持函數作為參數傳遞。
    • 支持 std::function 類型來封裝可調用對象。
  • Java 中:Java 8 引入了 lambda 表達式和 Stream API,也支持函數式編程。

示例:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int main() {vector<int> v = {1, 2, 3, 4, 5};// 使用 Lambda 表達式計算每個元素的平方for_each(v.begin(), v.end(), [](int x) { cout << x * x << " "; });cout << endl;return 0;
}

在這個 C++ 示例中,for_each 函數接受一個 Lambda 表達式作為參數,實現了類似 Java 中 Stream API 的操作。


5. 并發編程(Concurrent Programming)

在 C++ 中的表現

C++11 引入了對多線程的原生支持,提供了 std::thread 類,允許你在 C++ 中進行并發編程。

  • C++ 中

    • 使用 std::thread 來創建和管理線程。
    • 提供了 mutexcondition_variable 來處理同步。
  • Java 中:Java 有更強的內建支持,使用 Thread 類和 Executor 框架進行并發編程。

示例:
#include <iostream>
#include <thread>
using namespace std;void print_hello() {cout << "Hello from thread!" << endl;
}int main() {thread t(print_hello);  // 啟動一個新線程t.join();  // 等待線程結束return 0;
}

在這個 C++ 示例中,std::thread 用于創建一個新線程,并執行 print_hello 函數。


6. 元編程(Metaprogramming)

在 C++ 中的表現

C++ 支持 模板元編程(Template Metaprogramming, TMP),通過模板在編譯時進行計算、類型推導等,極大地提升了程序的性能。Java 沒有類似的元編程特性,主要依靠反射進行運行時的操作。

  • C++ 中:模板元編程允許在編譯時進行計算,并能根據類型特征選擇不同的代碼路徑。
  • Java 中:Java 使用反射 API,更多是在運行時進行類型信息獲取和操作。
示例:
#include <iostream>
using namespace std;template<int N>
struct Factorial {static const int value = N * Factorial<N - 1>::value;
};template<>
struct Factorial<0> {static const int value = 1;
};int main() {cout << Factorial<5>::value << endl;  // 輸出 120return 0;
}

這個 C++ 示例通過模板在編譯時計算出階乘值,完全不依賴運行時的計算。


總結

作為一名 Java 專家,理解 C++ 的編程范式,你需要關注以下幾點:

  1. 過程式編程:通過函數組織代碼,可以理解為 Java 中的 static 方法。
  2. 面向對象編程(OOP):C++ 強烈支持 OOP,特性與 Java 相似,但支持多重繼承和指針,能更底層地操作內存。
  3. 泛型編程:C++ 模板比 Java 泛型更加強大,支持編譯時的類型推導和計算。
  4. 函數式編程:C++ 通過 Lambda 表達式等實現函數式編程,類似 Java 中的 Stream API。
  5. 并發編程:C++

11 引入了原生的多線程支持,Java 的 ThreadExecutor 比較類似。
6. 元編程:C++ 強大的模板元編程能力是 Java 無法比擬的,允許編譯時進行復雜計算。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63550.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63550.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63550.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

llama2中的model.py中的結構示意圖

參考文章&#xff1a;https://zhuanlan.zhihu.com/p/679640407

開放詞匯目標檢測(Open-Vocabulary Object Detection, OVOD)綜述

定義 開放詞匯目標檢測&#xff08;Open-Vocabulary Object Detection, OVOD&#xff09;是一種目標檢測任務&#xff0c;旨在檢測和識別那些未在訓練集中明確標注的物體類別。傳統的目標檢測模型通常只能識別有限數量的預定義類別&#xff0c;而OVOD模型則具有識別“開放詞匯…

Vue與React:前端框架的巔峰對決

文章目錄 一、引言&#xff08;一&#xff09;前端框架發展現狀簡述 二、Vue 與 React 框架概述&#xff08;一&#xff09;Vue.js 簡介&#xff08;二&#xff09;React.js 簡介 三、開發效率對比&#xff08;一&#xff09;Vue 開發效率分析&#xff08;二&#xff09;React …

3分鐘讀懂數據分析的流程是什么

數據分析是基于商業目的&#xff0c;有目的地進行收集、整理、加工和分析數據&#xff0c;提煉出有價值的 信息的一個過程。整個過程大致可分為五個階段&#xff0c;具體如下圖所示。 1.明確目的和思路 在開展數據分析之前&#xff0c;我們必須要搞清楚幾個問題&#xff0c;比…

vba批量化調整word的圖和圖表標題

vba代碼 將圖片進行居中操作 Sub ChangePictureFormate()Dim oPara As ParagraphDim oRange As RangeDim i As LongDim beforeIsPicture As BooleanbeforesIsPicture False 確保文檔中至少有圖片If ActiveDocument.InlineShapes.Count 0 ThenMsgBox "沒有找到圖片。&qu…

llama.cpp:PC端測試 MobileVLM -- 電腦端部署圖生文大模型

llama.cpp&#xff1a;PC端測試 MobileVLM 1.環境需要2.構建項目3.PC測試 1.環境需要 以下是經實驗驗證可行的環境參考&#xff0c;也可嘗試其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;軟件環境&#xff1a;如下表所示 工…

詞嵌入(Word Embedding):自然語言處理的基石

目錄 ?編輯 詞嵌入&#xff08;Word Embedding&#xff09;&#xff1a;自然語言處理的基石 引言 詞嵌入的基本概念 詞嵌入的主要方法 1. Word2Vec 2. GloVe 3. FastText 4. ELMo 5. BERT 詞嵌入的應用場景 詞嵌入的研究進展 結論 詞嵌入&#xff08;Word Embedd…

AutoSarOS中調度表的概念與源代碼解析

--------AutoSarOS調度表的概念 一、AutoSarOS 是什么以及調度表的重要性 AutoSar(Automotive Open System Architecture)是汽車行業的一個開放式軟件架構標準哦。它就像是一種大家都遵循的規則,能讓不同的軟件供應商一起合作開發汽車軟件,這樣軟件就能被重復使用,開發效…

半連接轉內連接 | OceanBase SQL 查詢改寫

查詢優化器是關系型數據庫系統的核心模塊&#xff0c;是數據庫內核開發的重點和難點&#xff0c;也是衡量整個數據庫系統成熟度的“試金石”。為了幫助大家更好地理解 OceanBase 查詢優化器&#xff0c;我們撰寫了查詢改寫系列文章&#xff0c;帶大家更好地掌握查詢改寫的精髓&…

android opencv導入進行編譯

1、直接新建module進行導入&#xff0c;選擇opencv的sdk 導入module模式&#xff0c;選擇下載好的sdk&#xff0c;修改module name為OpenCV490。 有報錯直接解決報錯&#xff0c;沒報錯直接運行成功。 2、解決錯誤&#xff0c;同步成功 一般報錯是gradle版本問題較多。我的報…

通過阿里云 Milvus 與 PAI 搭建高效的檢索增強對話系統

背景介紹 阿里云向量檢索服務Milvus版&#xff08;簡稱阿里云Milvus&#xff09;是一款云上全托管服務&#xff0c;確保了了與開源Milvus的100%兼容性&#xff0c;并支持無縫遷移。在開源版本的基礎上增強了可擴展性&#xff0c;能提供大規模 AI 向量數據的相似性檢索服務。相…

【批量生成WORD和PDF文件】根據表格內容和模板文件批量創建word文件,一次性生成多個word文檔和批量創建PDF文件

如何按照Word模板和表格的數據快速制作5000個word文檔 &#xff1f; 在與客戶的合作的中需要創建大量的合同&#xff0c;這些合同的模板大概都是一致的&#xff0c;是不是每次我們都需要填充不一樣的數據來完成&#xff1f; 今天用表格數據完成合同模板的填充&#xff0c;批量…

pip使用方法

1. 安裝包&#xff1a; pip install &#xff1a;安裝指定的 Python 包。 pip install &#xff1a;安裝特定版本的 Python 包。 pip install -r requirements.txt&#xff1a;從文件中讀取依賴列表并安裝所有列出的包。 pip install --pre &#xff1a;允許安裝預發布或開發版…

Windows11 安裝 Ubuntu-20.04,同時安裝配置 zsh shell,配置 git 別名(alias),大大提高開發效率

背景&#xff1a;家里配置了一臺 Windows 電腦&#xff0c;有時候需要用到 vscode 開發測試一些代碼&#xff0c;在使用過程中發現原生 windows 敲代碼不是很友好&#xff0c;于是想到配置 wsl&#xff0c;安裝 Ubuntu&#xff0c;并安裝配置 zsh shell&#xff0c;同時配置 gi…

什么是漸進式 Web 應用,有哪些特點

漸進式 Web 應用 (Progressive Web Apps, PWAs) 的定義與特點 一、定義 漸進式 Web 應用&#xff08;Progressive Web App&#xff0c;簡稱 PWA&#xff09;是一種結合了傳統 Web 技術和現代移動應用特性的新型應用程序形式。PWAs 可以像普通網站一樣通過瀏覽器訪問&#xff…

鴻蒙心路旅程:HarmonyOS NEXT 心路旅程:技術、成長與未來

HarmonyOS NEXT 心路旅程&#xff1a;技術、成長與未來 技術的浪潮中&#xff0c;總有一些瞬間讓人感到心潮澎湃。作為一名HarmonyOS NEXT開發者&#xff0c;我有幸成為這個時代科技創新的一部分。從最初的接觸到深入學習、開發&#xff0c;以及如今規劃未來的職業方向&#x…

勤研低代碼平臺:重塑軟件開發協作新生態

在當今數字化浪潮洶涌澎湃的時代&#xff0c;軟件開發的效率與質量成為企業競爭的關鍵因素之一。勤研低代碼開發平臺以創新性的實際頁面 - 功能設計 - 頁面設計 - 原型頁面切換功能&#xff0c;脫穎而出&#xff0c;為軟件開發過程中的團隊協作、客戶溝通以及項目推進帶來了前所…

ChatGPT等大語言模型與水文水資源、水環境領域的深度融合

聚焦GPT等大語言模型與水文水資源領域的深度融合&#xff0c;通過系統化內容與實踐案例&#xff0c;講解如何高效完成時間序列分析、空間數據處理、水文模型優化以及智能科學寫作等任務。同時&#xff0c;展示AI在高級機器學習模型開發、資源優化算法編程與模型微調中的最新應用…

node安裝,npm安裝,vue-cli安裝以及element-ui配置項目

node.js Node.js主要用于開發高性能、高并發的網絡服務器&#xff0c;特別適合構建HTTP服務器、實時交互應用&#xff08;如聊天室&#xff09;和RESTful API服務器等。?它使用JavaScript語言&#xff0c;基于Chrome V8引擎&#xff0c;提供模塊化開發和豐富的npm生態系統&…

easyplayer-pro播放器學習

背調 查詢官方文檔&#xff0c;EasyPlayer-pro支持ws-flv, http-flv, hls, webrtc&#xff08;webrtc://xxx&#xff09;格式&#xff0c;電子放大、水印(動態水印、幽靈水印)、顯示上一個視頻最后一幀、播放器快照截圖、視頻錄制(WebM格式(音頻視頻)、MP4格式(視頻),FLV格式(…