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.mzph.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格式(…