【C++ 基础】从C到C++有哪些变化

news2024/12/25 6:10:50

C到C++

	C++相比C语言来说,多了两个核心,五个内容:
		1、面向对象的思维;2、模板(泛型编型)
		1.bool 2.引用 3.内联 4.重载 5.缺省参数

变量


数据类型 bool

  • 布尔 占1个字节 取值:true false

      bool isMax(int a, int b)
      {
      	return a > b;
      }
    

引用 为变量取别名

  • typedef int HP;//为类型取别名

  • *三种:乘号,解引用,指针

  • &三种:位与,取地址,引用

     void mySwap(int a, int b)//值传递
     {
     	int temp = a;
     	a = b;
     	b = temp;
     }
    
     void mySwap(int *pa, int *pb)//址传递
     {
     	int temp = *pa;
     	*pa = *pb;
     	*pb = temp;
     }
    
     void mySwap(int &a, int &b)//引用传递
     {
     	int temp = a;
     	a = b;
     	b = temp;
     }
    
  • 函数的值拷贝,如果是一个结构变量,尽量使用指针

  • 在C++里面,除了指针拷贝之外,还可以使用引用。使用指针和引用效率是一致

  • 指针和引用的区别:

    1、指针是一个有内存的实体,引用只是一个外号
    2、引用是常量,常量必须初始化赋值
    3、指针可以赋空
    4、指针内存唯一,引用不唯一
    

函数


内联函数

  • 通过内存膨胀来减少函数的跳转
    函数前面加关键字inline (空间换时间)

      inline int myAdd(int a, int b)
      {
      	return a + b;
      }
    
  • 内联的缺点

      1、如果函数内的函数体代码比较长,不建议内联
      2、函数体内有循环,不建议内联什么时候用内联:简单的赋值语句,及返回数据(函数体极少,使用频率高,用内联)
    
    
    
      int playHp = 0;
      inline int GetIndex(int num)
      {
      	return num % 10;
      }
    
      inline void SetValue(int v)
      {
      	playHp = v;
      }
    

函数重载

  1. 函数

    把代码的模块化为工具,以此增加代码的复用性

     int myAdd(int x,int y)//计算两整型数据和的工具函数
     {	
     	return x+y;	
     }
    
  2. 函数重载

    一个函数名对应多个函数体,什么情况下构成重载:满足两个条件:

    -函数名一致

    -参数列表不一致

     1.参数对应位置类型不同
     2.参数的个数不同
    

    例如

     int myAdd(int x,int y)   double myAdd(double x,double y)   int myAdd(int x,int y,int z)
     {                        {                                 {
         return x+y;                 return x+y;                    return x+y+z;
     }                        }                                 }
    

    注意:和函数返回值没有关系

  3. 重载的应用

     #include<iostream>
     using std::cout;//using namespace std;
     using std::endl;//前一种命名空间方式要安全
     int myAdd(int x,int y)
     {
         return x+y;
     }
     double myAdd(double x,double y)
     {
         return x+y;
     }
     int myAdd(int x,int y,int z)
     {
         return x+y+z;
     }
     int main()
     {
     	cout<<myAdd(1,2)<<endl;
     	cout<<myAdd(1.1,2.2)<<endl;//注意小数在编译过程中,会被看作double类型,float类型需要在小数后加f
     	cout<<myAdd(1,2,3)<<endl;	
         return 0;
     //使用重载函数时,注意类型转换带来的错误
     }
    

函数缺省参数

  1. 缺省参数

    函数在定义形参时给出初始值

     int myMul(int x,int y=9)
     {
         return x*y;
     }
    
  2. 注意事项

    -参数的缺省只能从后往前,依次缺省,不能从前往后

     int myMul(int x,int y=9,int z)
     {
     	函数体
     }
     //错误的写法
    

    -参数的缺省,在只有定义的情况下可以在写在定义上,如果有声明,只要在声明中缺省,不要在定义中缺省

     #include<iostream>
     using std::cout;
     using std::endl; 
     int myMul(int x,int y=9);//函数声明
     int main()
     {
     	cout<<myMul(4)<<endl;
         return 0;
     }
     int myMul(int x,int y=9)//函数定义
     {
     	return x*y;
     }
     //编译报错:重定义默认参数 : 参数 2
    

    -函数的参数缺省与重载混合使用时,一定要注意参数缺省导致重载的二义性

     #include<iostream>
     using std::cout;
     using std::endl;
     int myMul(int x,int y)
     {
     	return x*y;
     }
     int myMul(int x,int y,int z=9)
     {
     	return x*y*z;
     }
     int main()
     {
     	cout<<myMul(2,3)<<endl;
    
     	return 0;
     }
     //提示错误:对重载函数的调用不明确
    
  3. 缺省参数的应用

     #include<iostream>
     using std::cout;
     using std::endl; 
     int myMul(int x,int y=9)
     {
     	return x*y;
     }
     int main()
     {
     	cout<<myMul(4)<<endl;
     	cout<<myMul(4,6)<<endl;//6会覆盖9
         return 0;
     }
    

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

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

相关文章

如何在window 使用 conda 环境下载大模型

最近开始学习 变形金刚&#xff0c;最大的问题就是 huggingface 无法访问&#xff0c;无论是翻墙还是通过本地镜像网站HF-Mirror&#xff0c;然后再通过git下载都很慢&#xff0c;影响学习进度&#xff0c;后面看了如下文章&#xff0c;Huggingface配置镜像_huggingface镜像-CS…

WebRTC学习二:WebRTC音视频数据采集

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC 学习一&#xff1a;获取音频和视频设备 第五篇 WebRTC学习二&#xff1a;WebRTC音视频数据采集 文章目录 系列文章…

内部知识库的未来展望:技术融合与用户体验的双重升级

在当今数字化飞速发展的时代&#xff0c;企业内部知识库作为知识管理的关键载体&#xff0c;正站在变革的十字路口&#xff0c;即将迎来技术融合与用户体验双重升级的崭新时代&#xff0c;这一系列变化将深度重塑企业知识管理的格局。 一、技术融合&#xff1a;开启知识管理新…

淘宝详情API接口怎么去使用,调用解析

淘宝开放平台提供了丰富的API接口&#xff0c;帮助开发者快速实现与淘宝的交互。其中&#xff0c;淘宝详情API是用于获取商品详情的重要接口之一。通过调用该接口&#xff0c;开发者可以获取到商品的详细信息&#xff0c;如价格、库存、描述等。本文将详细介绍如何调用淘宝详情…

框架程序设计-简答以及论述

目录 maven的pom作用&#xff1a; Pointcut("execution(*com.example.dome.*.*(……))") 缓存的作用&#xff0c;redis配置过程 Redis配置过程&#xff1a; SpringBoot缓存配置过程&#xff1a; AOP的五种增强注解&#xff1a; 论述题&#xff1a;包结构作用、…

【开源库 | xlsxio】C/C++读写.xlsx文件,xlsxio 在 Linux(Ubuntu18.04)的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …

频繁拿下定点,华玉高性能中间件迈入商业化新阶段

伴随着智能驾驶渗透率的快速增长&#xff0c;中国基础软件市场开始进入黄金窗口期。 近日&#xff0c;华玉通软&#xff08;下称“华玉”&#xff09;正式获得某国内头部轨道交通产业集团的智能化中间件平台定点项目。这将是华玉在基础软件领域深耕和商业化发展过程中的又一重…

Mac电脑移动端抓包

*一、相关软件的安装* *1.下载地址* l Fiddler Everywhere 官网&#xff1a;https://www.telerik.com/download/fiddler-everywhere l Charles 官网&#xff1a;https://www.charlesproxy.com/ l Wireshark 官网&#xff1a;https://www.wireshark.org/download.html *…

Spring Boot 动态定时任务管理系统(轻量级实现)

Spring Boot项目中&#xff0c;实现动态增删和启停定时任务的功能对于许多应用场景来说至关重要。虽然Quartz框架是一个广泛使用的解决方案&#xff0c;但其复杂性和重量级特性可能使得项目变得臃肿和难以维护。为了解决这个问题&#xff0c;本项目旨在实现一个轻量级的定时任务…

提高保养效率:4S店预约系统的设计与开发

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该4S店预约保养系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff…

网络下载ts流媒体

网络下载ts流媒体 查看下载排序合并 很多视频网站&#xff0c;尤其是微信小程序中的长视频无法获取到准确视频地址&#xff0c;只能抓取到.ts片段地址&#xff0c;下载后发现基本都是5~8秒时长。 例如&#xff1a; 我们需要将以上地址片段全部下载后排序后再合成新的长视频。 …

(叁)前端实现加密的方式:AES 加密(实现的两种方式)

前端实现加密&#xff1a; Ⅰ、AES 加密&#xff1a;1、使用 AES 加密前的准备工作&#xff1a;其一、安装 crypto-js &#xff1a;A、安装命令&#xff1a;B、成功安装后的截图&#xff1a; 2、实现 AES 加密的方式一&#xff1a;其一、在项目中创建 crypto.js 文件&#xff1…

kubernates实战

使用k8s来部署tomcat 1、创建一个部署&#xff0c;并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…

自动化测试框架playwright 常见问题和解决方案

自动化课程已经讲完了playwright框架&#xff0c;很多同学跃跃欲试&#xff0c;所谓实践出真知&#xff0c;这不在实践中就要到了一些问题&#xff0c;小编也给大家整理出来了&#xff0c;送个有需要的同学&#xff0c;记得点赞收藏哦~~ 01安装问题 问题描述&#xff1a; 在安…

清华、智谱团队:探索 RLHF 的 scaling laws

基于人类反馈的强化学习&#xff08;RLHF&#xff09;是优化大语言模型&#xff08;LLM&#xff09;行为的关键技术&#xff0c;能够让模型更符合人类偏好和需求&#xff0c;提升生成质量。 然而&#xff0c;目前关于 RLHF 的 scaling&#xff08;扩展&#xff09;潜力研究仍然…

八股(One Day one)

最近老是看到一些面试的视频&#xff0c;对于视频内部面试所提到的八股文&#xff0c;感觉是知道是什么&#xff0c;但是要说的话&#xff0c;却又不知道该怎么说&#xff08;要不咋称之为八股文呢&#xff09;&#xff0c;所以就想到写一篇八股文总结的博客&#xff0c;以便进…

springboot创建web项目

一、创建项目 二、导入依赖&#xff08;pom.xml&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schem…

LeetCode 343.整数拆分

1.题目要求: 2.题目代码: class Solution { public:int integerBreak(int n) {//先确定dp数组vector<int> dp;//1.确定dp数组的含义//2.确定dp的递推公式//3.初始化dp数组//4.遍历顺序dp.resize(n 1);dp[0] 0;dp[1] 0;dp[2] 1;for(int i 3;i < n;i){for(int j …

Postman最新详细安装及使用教程【附安装包】

一、Postman介绍 ‌Postman是一个功能强大的API测试工具&#xff0c;主要用于模拟和测试各种HTTP请求&#xff0c;支持GET、POST、PUT、DELETE等多种请求方法。‌通过Postman&#xff0c;用户可以发送请求并查看返回的响应&#xff0c;检查响应的内容和状态&#xff0c;从而验…

开源 JS PDF 库比较

原文查看&#xff1a;开源JavaScript PDF Library对比 对于需要高性能、复杂功能或强大支持处理复杂 PDF 的项目&#xff0c;建议选择商业​​ PDF 库, 如ComPDFKit for Web。但是&#xff0c;如果您的目标只是在 Web 应用程序中显示 PDF&#xff0c;则可以使用几个可靠的开源…