c与c++用法区别剖析 迟早得用到

                从C语言过渡到c++,肯定要掌握这些吧

1.面向对象编程:

  • C语言是过程化编程语言,它主要关注函数和过程。
  • C++支持面向对象编程,提供类、继承、多态等特性。
// C++中的类和对象
class Rectangle {
private:int width, height;
public:Rectangle(int w, int h) : width(w), height(h) {}int area() { return width * height; }
};int main() {Rectangle rect(3, 4);cout << "Area: " << rect.area() << endl;return 0;
}

2.封装和访问控制:

  • C语言没有类的概念,因此没有访问控制。
  • C++支持封装和访问控制,可以使用public、private和protected关键字控制成员的访问权限。
// C++中的封装和访问控制
class BankAccount {
private:double balance;
public:void deposit(double amount) {if (amount > 0) {balance += amount;}}double getBalance() {return balance;}
};int main() {BankAccount acc;acc.deposit(1000);cout << "Balance: " << acc.getBalance() << endl;return 0;
}

3.函数重载:

  • C语言不支持函数重载。
  • C++支持函数重载,允许定义多个同名函数,只要它们的参数列表不同即可。
// C++中的函数重载
int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}

4.动态内存管理:

  • C语言使用malloc()和free()进行动态内存分配和释放。
  • C++引入了new和delete运算符,用于动态内存的分配和释放,同时提供了RAII(资源获取即初始化)的概念。
// C++中的动态内存管理
int* arr = new int[10]; // 分配动态数组
delete[] arr; // 释放动态数组

5.默认参数:

  • C语言不支持默认参数。
  • C++支持默认参数,可以在函数声明中给参数一个默认值,调用函数时可以不传递这个参数。
// C++中的默认参数
void printMessage(string message = "Hello") {cout << message << endl;
}int main() {printMessage(); // 输出默认消息printMessage("Bonjour"); // 输出指定消息return 0;
}

6.模板编程:

  • C语言不支持模板编程。
  • C++支持模板编程,可以编写泛型代码,使得算法在不同类型数据上都能工作。
// C++中的模板编程
template<typename T>
T add(T a, T b) {return a + b;
}int main() {cout << "Sum of integers: " << add(5, 3) << endl;cout << "Sum of doubles: " << add(3.5, 2.5) << endl;return 0;
}

7.异常处理:

  • C语言通过返回值或者全局变量来处理错误。
  • C++支持异常处理机制,使用try、catch、throw关键字来捕获和处理异常。
// C++中的异常处理
int divide(int a, int b) {if (b == 0) {throw "Division by zero!";}return a / b;
}int main() {try {cout << "Result: " << divide(10, 0) << endl;} catch (const char* msg) {cout << "Error: " << msg << endl;}return 0;
}

8.命名空间:

  • C语言没有命名空间的概念,所有的函数和变量都在全局命名空间中。
  • C++支持命名空间,可以将一组相关的函数、类、变量等放在一个命名空间中,避免命名冲突。
// C++中的命名空间
namespace Math {const double PI = 3.14159265;double square(double x) {return x * x;}
}int main() {cout << "PI: " << Math::PI << endl;cout << "Square of 5: " << Math::square(5) << endl;return 0;
}

9. 引用:

  • C语言没有引用的概念,只能通过指针来实现类似的功能。
  • C++支持引用,引用提供了一个对象的别名,通常用于函数参数传递和返回值。

 10.运算符重载:

  • C语言不支持运算符重载。
  • C++支持运算符重载,可以重新定义运算符的行为,使其适用于自定义类型。
// C++中的运算符重载
class Complex {
private:double real, imag;
public:Complex(double r, double i) : real(r), imag(i) {}Complex operator+(const Complex& other) {return Complex(real + other.real, imag + other.imag);}void display() {cout << real << " + " << imag << "i" << endl;}
};int main() {Complex a(2, 3);Complex b(4, 5);Complex c = a + b;c.display();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越视觉极限:深度学习图像超分辨率算法清单【第三部分】

超越视觉极限&#xff1a;深度学习图像超分辨率算法清单【第三部分】 简介2018年 - DBPN (Deep Back-Projection Networks)2018年 - RDN (Residual Dense Network)2018年 - SRRGAN (Super-Resolution Reconstruction Generative Adversarial Network)2019年 - FSRGAN (Fast Sup…

Spring AI多模态接口开发

文章目录 项目地址创建项目配置项目接口开发结果测试测试接口测试在线图片接口测试本地图片接口测试 项目地址 Spring AI项目开发 创建项目 打开IDEA创建一个新的spring boot项目&#xff0c;填写项目名称和位置&#xff0c;类型选择maven&#xff0c;组、工件、软件包名称可…

Ubuntu apt-get install 失败

一般方法&#xff0c;执行如下指令 sudo apt-get update# 某些系统程序才需要&#xff0c;比如make sudo apt-get install build-essentialsudo apt-get install make这一步如何能成功&#xff0c;则说明是使用方式错误&#xff0c;问题比较简单 如果继续失败&#xff0c;提示…

实现vant的年月日时分秒组件

方法&#xff1a;van-datetime-picker&#xff08;type&#xff1a;datetime&#xff09;和 van-picker结合实现。 <template><div class"datetimesec-picker"><van-datetime-pickerref"timePickerRef"type"datetime" //年月日时…

【系统架构师】-案例篇(十一)质量属性、瘦客户端与Web系统架构

1、架构评估中的质量属性 ① 性能&#xff0c;是指系统的响应能力&#xff0c;即要经过多长时间才能对某个事件做出响应&#xff0c;或者在某段时间内系统所能处理的事件的个数。 ② 可靠性&#xff0c;是软件系统在应用或系统错误面前&#xff0c;在意外或错误使用的情况下维…

Android 11 输入系统之InputDispatcher和应用窗口建立联系

InputDispatcher把输入事件传给应用之前&#xff0c;需要和应用窗口建立联系&#xff0c;了解了这个过程&#xff0c;就清楚了APP进程和InputDispatcher线程也就是SystemServer进程之间是如何传输数据了 我们向窗口addView的时候&#xff0c;都会调用到ViewRootImpl的setView方…

Canvas简历编辑器-我的剪贴板里究竟有什么数据

Canvas简历编辑器-我的剪贴板里究竟有什么数据 在这里我们先来聊聊我们究竟应该如何操作剪贴板&#xff0c;也就是我们在浏览器的复制粘贴事件&#xff0c;并且在此基础上聊聊我们在Canvas图形编辑器中应该如何控制焦点以及如何实现复制粘贴行为。 在线编辑: https://windrun…

Docker 部署 Nginx 实现一个极简的 负载均衡

背景: Nginx是异步框架的网页服务器&#xff0c;其常用作反向代理(负载均衡器)。在一般的小项目中, 服务器不多, 如果不考虑使用服务注册与发现, 使用Nginx 可以容易实现负载均衡。 在特此写一个快速入门 Nginx 的技术贴, 使用 Docker 部署 Nginx, 实现一个极简的加权轮询负载均…

现在的原创内容博客 SEO 最好就选谷歌和必应!

当我们在国内讨论搜索引擎优化的时候&#xff0c;我们经常讨论的是百度 SEO&#xff0c;很少提及 Bing 搜索与 Google 搜索&#xff0c;但随着跨境电商的崛起&#xff0c;在国内做外贸 SEO 的小伙伴越来越多&#xff0c;有效的了解 Bing 搜索与 Google 搜索的优化规则是很有必要…

2024年武侯区建设企业科技创新平台申报范围条件、奖励标准和材料

一、申报对象 支持企业围绕数字健康、消费电子、新型材料等重点领域&#xff0c;布局建设一批重点实验室、创新中心、企业技术中心等高端研发平台&#xff0c;着力突破产业关键技术。实施产业链人才开源计划&#xff0c;支持链主企业为上下游关联配套企业提供技术与人才支持、…

(第17天)栈与队列理论基础

目录 栈栈的逻辑结构基于逻辑结构的特性 栈的底层实现 队列队列的逻辑结构基于逻辑结构的特性 队列的底层实现 总结 栈 栈的逻辑结构 栈是一种先入后出的结构。 基于逻辑结构的特性 栈中的元素必须遵循先入后出的规则&#xff0c;因此栈提供pop()、push()接口进行对元素的操作…

开源aodh学习小结

1 介绍 aodh是openstack监控服务&#xff08;Telemetry&#xff09;下的一个模块&#xff0c;telemetry下还有一个模块ceilometer OpenStack Docs: 2024.1 Administrator Guides Get Started on the Open Source Cloud Platform - OpenStack Telemetry - OpenStack 1.1 代码仓…

softmax函数与交叉熵损失详解

文章目录 一、softmax函数1.1 引入指数形式的优点1.2 引入指数形式的缺点 二、交叉熵损失函数2.1 交叉熵损失函数2.2 softmax与交叉熵损失 参考资料 一、softmax函数 softmax用于多分类过程中&#xff0c;它将多个神经元的输出&#xff0c;映射到&#xff08;0,1&#xff09;区…

【C++ 内存管理】深拷贝和浅拷贝你了解吗?

文章目录 1.深拷贝2.浅拷贝3.深拷贝和浅拷贝 1.深拷贝 &#x1f34e; 深拷⻉: 是对对象的完全独⽴复制&#xff0c;包括对象内部动态分配的资源。在深拷⻉中&#xff0c;不仅复制对象的值&#xff0c;还会复制对象所指向的堆上的数据。 特点&#xff1a; &#x1f427;① 复制对…

蓝桥杯-移动距离(最简单的写法)

X星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。 其楼房的编号为 1,2,3…当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为 6 时&#xff0c;开始情形如下&#xff1a; 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 … 我…

程序设计语言理论中的范畴论及其简单应用

程序设计语言理论中的范畴论及其简单应用 范畴论是一个深奥的数学分支&#xff0c;近年来在程序设计语言理论中得到了广泛的应用。本文将简要介绍范畴论的基本概念&#xff0c;并通过简单示例来说明其在程序设计中的应用。 范畴论的基本概念 范畴&#xff08;Category&#…

Vue3:数据交互axios

回调函数 > 回调函数: 一些特殊的函数,表示未来才会执行的一些功能,后续代码不会等待该函数执行完毕就开始执行了 1. Promise 1.1 简介 > 前端中的异步编程技术&#xff0c;类似Java中的多线程线程结果回调&#xff01; * Promise 是异步编程的一种解决方案&#xff0c…

记录一下 log4j的漏洞

目录 背景 bug的产生 bug复现 JNDI 网络安全学习路线 &#xff08;2024最新整理&#xff09; 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; 背景 log4j这次的bug&#xff0c;我相信大家都已经知道了&#xff0c;仅以…

网络安全软件堡垒机推荐行云管家云堡垒机!

随着互联网技术的快速发展&#xff0c;以及数字化转型的快速转变&#xff0c;网络安全已成为企业生存和发展的关键要素。网络安全不仅是国家等保要求&#xff0c;也是企业发展必须面对的挑战。目前市面上网络安全软件较多&#xff0c;这里我给推荐行云管家堡垒机&#xff01; …

【unity小技巧】减少Unity中的构建打包大小

文章目录 正常默认打包查看编辑器打包日志压缩图片压缩网格模型压缩贴图压缩音频文件只打64位包最终大小完结 正常默认打包 这里以安卓为例。先什么都不干&#xff0c;直接打包安卓apk&#xff0c;查看包大小 查看编辑器打包日志 搜索build report构建报告。构建报告我们应该…