C到C++笔记记录

C到C++笔记记录

  • 输入(cin) and 输出(cout)
  • bool
  • 内联(inline)
  • 重载
  • 缺省函数
  • 哑元
  • 引用(&)
  • C++动态内存分配
  • 笔记扩充:

输入(cin) and 输出(cout)

#include<iostream>using namespace std;void main()
{int i;//输入 cincin >> i;//输出 coutcout << i << endl;system("pause");//暂停窗口
}

bool

bool b = true (表示真)
bool b = false (表示假)3

内联(inline)

(PS:调用函数复杂度的高的不推荐使用内联操作)
1.避免重复调用函数(PS:类似递归操作)
2.牺牲空间 换取高效率
3.写了inline关键字不代表一定会按照内联的运行方式去运行(简单说鸡肋)

(PS:内联的运行方式:简单说 无需重新申请 调用函数,可以直接调用函数)
在这里插入图片描述
在这里插入图片描述

重载

  • (1)重载解释:
    1.同一个作用域 函数名相同 参数不同的函数
    (PS:两个函数名字一样,但是里面所带的参数类型不一样)
    2.重载和返回类型无关
    (PS:重载与函数类型没有关系,不论是函数类型相同不相同。只要函数名相同 参数相同 则不能重载)
    3.重载遵守临近隐藏原则
    (PS:相同函数名或变量名,优先调用距离最近一次声明的函数和变量)
  • (2)可以重载的要求:
    2.参数 个数 不一样 可以重载
    3.参数 顺序 不一样 可以重载
    4.参数 类型 不一样 可以重载

缺省函数

  • 缺省函数解释:
      写函数参数时定义 形参的默认值,当 实参 传入时 没有变量 ,则使用 形参默认值 代替实参
    (PS:为函数指定 默认值,调用时若未提供实参,则对应位置的形参用默认值代替)
  • 使用要求:
    1.缺省参数必须从 右边第一个参数 开始定义
    2.禁止声明和定义时同时指定缺省参数(PS:最好在声明时指定缺省参数 )
    3.缺省参数禁止在重载时使用(会造成重载歧义)

源码

#include<iostream>
#include<stdlib.h>
using namespace std;void fun(char a = 'w',char b = 's' ){cout << "Worl"<< a  << b  << endl;
}
void main()
{fun();//无参时输出'Worlws'fun('d','s');//传参时输出'Worlds'system("pause");
}

运行结果:

Worlws
Worlds
请按任意键继续. . .

哑元

  • 哑元解释:
      将 形参变量名 删除,只有函数类型称为 哑元 。当形参变量被删除时函数内变量会停止使用(详细看源码)
  • 哑元用处:
    1.可以用来占形参位置
    2.兼容老版本
    3.形成函数重载
    源码
#include<iostream>
#include<stdlib.h>
using namespace std;
//将 a 进行注释后,a 不会被传参传入
void fun(char /*a = 'w'*/,char b = 's' ){cout << "Worl"<< a  << b  << endl;
}
void main()
{fun();//无参时输出'Worls'fun('d','w');//传参时输出'Worls'system("pause");
}

运行结果:

Worls
Worls
请按任意键继续. . .

引用(&)

  • 引用解释:
      引用相当于给变量取别名,对引用的操作相当于直接影响变量(PS:与C语言中指针用法差不多,但是引用就相当于一个别名。)

  • 引用注意事项:
    1.引用是一对一的,地址不变,值能变(但是能改变值);
    2.引用必须初始化 and 不能为空
    3.引用做参数 形参就相当于实参
    4.引用不额外占用内存

#include<iostream>
#include<string>using namespace std;
//取最大值
int Max(int& a, int b)
{a = 2;//改变引用形参的值(此时改变会影响实参)b = 5;//改变形参的值(此时改变并不影响实参)return a > b ?  a: b;
}
int& Add(int &a)
{return ++a;
}
void main()
{//1. 引用是一对一的,地址不变,值能变(但是能改变值);int a = 18;int &function = a;cout << "改变前的地址" << &function << endl;function = Add(a);cout << "改变后的地址" << &function << endl;cout << "Add:" << function << endl;int test = 30;//2. 引用必须初始化 and 不能为空//初始化int &t = test;t = 40;//改变所引用的值cout << "&t=" << t << endl;//打印 &t 变量值cout << "test=" << test << endl;//打印 test 变量值cout << "&t 地址:" << &t << endl;//打印 &t 地址cout << "test 地址:" << &test << endl;//打印 test 地址//3. 引用做参数 形参就相当于实参int s = 30;//获取最大值cout << "Max:" << Max(s, t) << endl;//当引用作为参数 其实参也会随之改变cout << "改变后的值:" << s << "未改变的值:" << t << endl;system("pause");
}

C++动态内存分配

  • C++动态内存分配解释:
    1.C++动态内存分配关键词:new and delete
    2.动态内存分配解释参考C语言:C_顺序表(动态数组插入)

  • C++动态内存分配操作:
    1.使用new / delete操作符
    2.内存分配的同时初始化
    3.动态内存分配数组
    4.内存分配失败,抛出bad_alloc异常

#include<iostream>
#include<string>using namespace std;
//取最大值
void main()
{//1.使用new / delete操作符//(PS:初始化后如果不进行赋值将变成野指针)int* p1 = new int;*p1 = 123;cout << *p1 << endl;delete p1;p1 = NULL;//2.内存分配的同时初始化int* p2 = new int(20);cout << *p2 << endl;delete p2;p2 = NULL;//3.动态内存分配数组int* arr = new int[4];for (int i = 0; i < 4; ++i){arr[i] = i;cout << arr[i]<<" ";}cout << endl;delete[] arr;//删除时需要带[]arr = NULL;//动态内存分配数组的同时初始化int* brr = new int[4]{1,3,5,9};for (int i = 0; i < 4; ++i){cout << brr[i] << " ";}cout << endl;delete[] brr;//删除时需要带[]brr = NULL;system("pause");
}

笔记扩充:

  1. Windows PowerShell 中指令
关键词注释
g++编译源代码
g++ -c以二进制形式编译c++文件
nm以二进制形式读取文件

效果图:
在这里插入图片描述
2.在C++里使用C语言形式方法:
(参考文章:C++关键字extern的使用)

extern 外部声明

  • 例子:extern “C” void func(int a);
      这句话就是告诉编译器,在编译 func 函数名时,按着 C 的规则去翻译相应的函数名,而不是 按C++ 的方式。这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略。
  • 这个功能主要用在下面的情况:
    1.C++代码调用C语言代码
    2.在多个人协同开发时,可能有的人比较擅长C语言,而有的人擅长C++,这样的情况下也会有用到

源码

#include<iostream>
#include<stdlib.h>
using namespace std;//C语言 形式打印
extern "C"
{void fun(){printf("Hello\n");}
}
//C++ 形式打印
void fun(char a ){cout << "Worl"<< a  << endl;
}
void main()
{fun();fun('d');system("pause");
}

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

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

相关文章

浅谈云性能测试的关键要点

随着云计算的广泛应用&#xff0c;云性能测试成为确保云服务质量和性能的关键环节。云性能测试不仅涵盖了传统性能测试的方面&#xff0c;还需要考虑云环境的特殊性。以下是云性能测试的几个关键要点&#xff1a; 1. 模拟真实云环境 云环境具有虚拟化、弹性扩展等特点&#xff…

IDEA tomcat内存不足

-Xms256m -Xmx256m -XX:MaxNewSize256m -XX:MaxPermSize256m

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph API资源对象StorageClass SC的主要作用在于&#xff0c;自动创建PV&#xff0c;从而实现PVC按需自动绑定PV。 下面我们通过创建一个基于NFS的SC来演示SC的作用。 要想使用NFS的SC&#xff0c;还需要安装一个NFS…

npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3

在使用npm时&#xff0c;有时候您可能会遇到类似以下错误的权限问题&#xff1a; npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3 npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denie…

掌握数组处理的利器:双指针技巧详解

掌握数组处理的利器&#xff1a;双指针技巧详解 在算法的世界里&#xff0c;数组是最基础也是最常见的数据结构之一。处理数组相关问题时&#xff0c;我们经常需要遍历数组元素&#xff0c;而如何高效地进行遍历&#xff0c;就显得尤为重要。今天&#xff0c;我们就来深入探讨…

Kubernetes 的用法和解析 -- 5

一.企业级镜像仓库Harbo 准备&#xff1a;另起一台新服务器&#xff0c;并配置docker yum源&#xff0c;安装docker 和 docker-compose 1.1 上传harbor安装包并安装 [rootharbor ~]# tar xf harbor-offline-installer-v2.5.3.tgz [rootharbor ~]# cp harbor.yml.tmpl harbor…

不会代码循环断言如何实现?只要6步!

对于使用jmeter工具完成接口测试的测试工程师而言。在工作中&#xff0c;或者在面试中&#xff0c;都会遇到一个问题—— “CSV文档做了一大笔测试数据后&#xff0c;怎么去校验这个结果呢&#xff1f;” 现在大部分测试工程师可能都是通过人工的方法去查看结果&#xff0c;十…

作业--day33

基于UDP的TFTP文件上传 #include <myhead.h>#define PORT 69 #define IP "192.168.125.59"int down(const char *); int up(const char *);int main(int argc, const char *argv[]) {while(1){system("clear");//打印菜单puts("**************…

《Kotlin核心编程》笔记:设计模式

创建型模式 主流的创建型模式有&#xff1a;工厂方法模式、抽象工厂模式、构建者模式 伴生对象增强工厂模式 在有些地方会把工厂模式细分为简单工厂、工厂方法模式以及抽象工厂。 这里主要介绍简单工厂的模式&#xff0c;它的核心作用就是通过一个工厂类隐藏对象实例的创建…

C++初阶-反向迭代器的模拟实现

反向迭代器的模拟实现 一、反向迭代器的定义二、反向迭代器的功能2.1 operator2.2 operator- -2.3 operator*2.4 operator&#xff01; 三、list反向迭代器模拟实现完整代码3.1 list.h3.2 iterator.h3.3 test.cpp 一、反向迭代器的定义 我们反向迭代器的思路是复用正向迭代器的…

STM32F407-14.3.12-01使用断路功能

使用断路功能 使用断路功能时&#xff0c;根据其它控制位&#xff08;TIMx_BDTR 寄存器中的 MOE⑨、OSSI⑪ 和 OSSR⑩ 位以及 TIMx_CR2 寄存器中的 OISx⑰ 和 OISxN⑱ 位&#xff09;修改输出使能信号和无效电平。任何情况下&#xff0c;OCx③ 和 OCxN④ 输出都不能同时置为有效…

LD2450-24G人体移动跟踪轨迹雷达模块

文章目录 前言一、LD2450简介特点引脚定义 二、使用步骤上位机使用方法通信协议协议格式数据输出协议 雷达命令配置方式串口解析示例 前言 运动目标跟踪是指在区域内实时跟踪运动目标所在的位置&#xff0c;实现对区域内运动目标测距、测角和测速。LD2450是海凌科24G毫米波雷达…

WFrest 库:快速、高效的基于workflow的C++异步 Web 框架

在这篇博客中&#xff0c;我将介绍 WFrest 库&#xff0c;一个基于 C Workflow 企业级程序引擎的异步 Web 框架。WFrest 库能够帮助开发者快速搭建 HTTP 服务器&#xff0c;实现高效的 Web 应用开发。 一、WFrest 库的背景 WFrest 库是一个由[作者/团队]开发的开源项目&#…

基于paddlepaddle的FPS最远点采样

什么是FPS最远点采样&#xff1f; 最远点采样&#xff08;Farthest Point Sampling&#xff0c;FPS&#xff09;是一种常用的采样算法&#xff0c;主要用于点云数据&#xff08;如激光雷达点云数据、分子坐标等&#xff09;的采样。 为了方便解释&#xff0c;定义一下待采样点…

深入解析线程安全的Hashtable实现

目录 引言 1. Hashtable简介 2. Hashtable线程安全实现原理 2.1. 锁机制 2.2. 分段锁 2.3. CAS操作 3. 线程安全策略 3.1. 同步方法 3.2. 分段锁优化 3.3. 乐观锁和CAS 4. 性能优化 4.1. 负载均衡 4.2. 惰性加载 5. 注意事项 5.1. 死锁和性能问题 5.2. 内存开销…

嵌入式软件测试(黑盒测试)---三年嵌入式软件测试的理解

文章内容为本人这三年来在嵌入式软件测试&#xff08;黑盒&#xff09;上的一些积累吧&#xff0c;说起来也挺快的&#xff0c;毕业三年的时间就这样过去了&#xff0c;在两家公司工作过&#xff08;现在这家是第二家&#xff09;&#xff0c;这几年的测试项目基本都是围绕着嵌…

深入探索Zookeeper的ZAB协议:分布式系统的核心解析

引言 自我进入软件开发领域以来&#xff0c;我一直对分布式系统充满着浓厚的兴趣。在这个领域中&#xff0c;Zookeeper无疑是一个备受关注的重要组件。作为一名资深的Java工程师&#xff0c;我有幸深入探索过Zookeeper的许多方面&#xff0c;其中最让我着迷的部分莫过于其核心机…

第十三章 枚举类型和泛型

枚举类型可以取代以往的常用的定义方式&#xff0c;即将常量封装在类或者接口中&#xff0c;此外它还提供了安全检查功能。枚举类型本质上还剋以类的形式存在。泛型的出现不仅可以让程序员少写一些代码&#xff0c;更重要的是它可以解决类型安全问题。泛型提供了编译时的安全检…

redolog有什么用,是怎么工作的

redolog其实就是想干一件事&#xff1a;当一个事务commit了&#xff0c;那肯定是在内存中改了&#xff0c;但是在磁盘里未必。可能刚提交事务就宕机了&#xff0c;还没来得及写磁盘&#xff08;并且也不会立刻写的&#xff0c;会隔一段时间才刷&#xff09;。redolog就是要保证…

关于设计师的自我评价(合集)

设计师的自我评价篇一 本人接受过正规的美术教育&#xff0c;具有较好的美术功底及艺术素养&#xff0c;能够根据公司的需要进行设计制作&#xff0c;熟练掌握多种电脑制作软件&#xff0c;能够高效率地完成工作。本人性格开朗、思维活跃、极富创造力&#xff0c;易于沟通&…