当前位置: 首页 > news >正文

【我的C++入门之旅】(上)

在这里插入图片描述

前言

C++的发展史

1979年,贝尔实验室的Bjarne等人试图分析unix内核的时候,试图将内核模块化,但是发现C语言有很多的不足之处,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes,之后经过不断的完善更新,在C语言的基础上诞生了C++这样一门语言

C++的重要性

所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:Photoshop、
Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件,称之为在硬件之上的语言
在这里插入图片描述

目录

  • 前言
    • C++的发展史
    • C++的重要性
  • 1.命名空间
    • 命名空间的定义
      • 命名空间的使用
  • 2.C++的 cout & cin
  • 3.缺省参数
    • 全缺省参数
    • 半缺省参数
    • 缺省参数用途
  • 4.函数重载
    • 编译链接过程
    • 函数名修饰规则

首先来个开胃菜:使用C++打印Hello World,打开我们的C++之旅

#include <iostream>
using namespace std;int main()
{cout << "Hello World!" << endl;return 0;
}

注:以下知识都是认识C语言的不足之处,取长补短,这样才能更好的了解C++

1.命名空间

C语言缺陷
命名冲突:
1.自己定义的和库里面的名字一样会发生冲突
2.我们自己起的名字和别人的一样,会发生冲突

这段代码如果不包含#include <stdlib.h>,可以正常运行

#include <stdio.h>
//#include <stdlib.h>int rand = 0;int main()
{printf("%d", rand);return 0;
}

但是如果包含了#include <stdlib.h>,就会报错,那到底是为什么呢?
原因很简单,因为我们定义的rand和头文件stdlib.h库里面的发生了冲突

在这里插入图片描述

那么为了更好的解决上边的问题,祖师爷在C的基础上增加了命名空间的概念:
namespace Willim(名字可以自取);
展开命名空间:using namespace William;
但是一般情况不要轻易展开命名空间
可以选择指定访问

命名空间的定义

下面是命名空间的定义和指定访问,指定访问,我们可以用: :
下面代码的意思是到命名空间William找到rand

//命名空间的定义
namespace William
{int rand = 1;
}int main()
{printf("%d", William::rand);//指定到命名空间访问一个叫rand的变量return 0;
}

但是如果展开了命名空间,就相当于暴露到全局,又和库里面的冲突了
在这里插入图片描述

当局部变量和全局变量还有命名空间里的变量名字相同的时候:
(如果有一个访问了,就不会进行访问后面的)
局部域 -> 全局域 -> 展开的命名空间域 or 指定访问命名空间域
如果命名空间没有展开,也不会去访问
如果展开了,如果有相同的名字也会发生冲突

int a = 0;
namespace William
{int a = 1;
}
//展开命名空间
//using namespace William;
int main()
{int a = 2;printf("%d\n", a);//局部域优先printf("%d", ::a);//跳过当前域return 0;
}

命名空间的使用

命名空间可以定义各种类型,如变量,函数,结构体等

namespace William
{int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Node//结构体{struct Node* next;int val;};
}

嵌套命名空间:
可以解决在同一个命名空间里有名字相同的变量

namespace N1
{int a;int b;int Add(int left, int right){return left + right;}namespace N2{int a;int b;int Sub(int left, int right){return left - right;}}
}int main()
{printf("%d \n", N1::Add(1, 2));printf("%d \n", N1::N2::Sub(3, 2));return 0;
}

2.C++的 cout & cin

cout标准输出 && <<流插入符
cin标准输入 && >> 流提取符
endl则是C++特有的换行符号
使用时必须包含含< iostream >头文件件以及按命名空间使用方法使用std

#include <iostream>
using namespace std;int main()
{cout << "Hello World!" << endl;return 0;
}

C++的输入输出可以自动识别变量类型,不用像printf/scanf那样,反倒更方便

#include <iostream>
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin >> a >> b >> c;cout << a << endl << b << endl << c << endl;return 0;
}

3.缺省参数

函数没有传参时,使用默认参数
传参时,使用指定参数

没有传参时
在这里插入图片描述
指定传参时
在这里插入图片描述

全缺省参数

#include <iostream>
using namespace std;
void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}int main()
{Func();return 0;
}

半缺省参数

半缺省参数必须从右往左依次来给出,不能间隔着给
缺省值必须是常量或者全局变量
C语言不支持

#include <iostream>
using namespace std;
void Func(int a, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}int main()
{Func(1);return 0;
}

缺省参数用途

一般情况下,我们可以这样使用,默认malloc的大小是4,不传参时,使用默认的值,也可以传参指定malloc的大小
在这里插入图片描述
在这里插入图片描述

4.函数重载

同名函数,一个函数有多个意思,形参可以参数个数不同,类型不同,顺序不同
返回值没有要求

这段代码中函数重名,但依然可以运行,这就是函数重载的概念,函数会根据参数自动匹配
但如果是C语言就会编译失败

void Func(int x)
{printf("%d", x);
}void Func(double c)
{printf("%f", c);
}int main()
{Func(1.1);
}

编译链接过程

了解一个概念:
编译和链接过程:
1.编译
#预处理://头文件展开//#denfine和宏定义的符号替换和删除//条件编译//去掉注释
#编译://检查语法//生成汇编代码
#汇编://把汇编代码翻译成二进制指令//形成符号表
2.链接
1.合并段表
2.符号表的合并和重定位
生成可执行程序

函数名修饰规则

在编译过程中声明就像(承诺),链接就像(兑现承诺)
在编译过程中会生成反汇编指令,那么通过函数名修饰规则:C语言在汇编代码里,直接用的函数名,而C++会把函数名的长度,类型的首字母带进去,从而自动匹配函数

C语言
在这里插入图片描述
C++
在这里插入图片描述
所以C++可以构成函数重载

创作不易,记得三连!

相关文章:

【我的C++入门之旅】(上)

前言 C的发展史 1979年&#xff0c;贝尔实验室的Bjarne等人试图分析unix内核的时候&#xff0c;试图将内核模块化&#xff0c;但是发现C语言有很多的不足之处&#xff0c;于是在C语言的基础上进行扩展&#xff0c;增加了类的机制&#xff0c;完成了一个可以运行的预处理程序&…...

dcdc降压电路原理及仿真

在之前的文章 DCDC 降压芯片基本原理及选型主要参数介绍 中已经大致讲解了dcdc降压电路的工作原理&#xff0c;今天再结合仿真将buck电路工作过程讲一讲。 基本拓扑 上图为buck电路的基本拓扑结构&#xff0c;开关打到1&#xff0c;电感充电&#xff1b;开关打到0&#xff0c;…...

搭建Redis主从集群+哨兵+代理predixy

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么&#xff1f;二、搭建Redis集群步骤1.环境和版本2.Redis 安装部署3.主从同步配置4.哨兵模式配置5.代理predixy配置 总结 前言 提示&#xff1a…...

Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】

文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下&#xff0c;每天都会产生海量的数据&#xff0c;这些…...

SQL——索引

&#x1f4a1; 索引 在关系型数据库中&#xff0c;索引是一种单独的、物理上的对数据库表中的一列或多列的值进行排序的一种存储结构&#xff0c;他是某个表中的一列或着若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单&#xff08;类似于图书目录&#x…...

Java代码组成部分

一、构造函数与默认构造函数 构造函数&#xff0c;是一种特殊方法。主要用来在创建对象时初始化对象&#xff0c;即为对象成员变量赋初始值&#xff0c;总与new运算符一起使用在创建对象的语句中。 /** * 矩形 */ class Rectangle {/*** 构造函数*/public Rectangle(int leng…...

vue2和vue3有啥区别,vue3的优点有哪些?

Vue.js 是一种流行的 JavaScript 框架&#xff0c;用于开发现代 Web 应用程序。Vue.js 具有简单易用、高效和灵活等特点&#xff0c;能够极大地提高开发效率并改进用户体验。Vue.js 一直在不断更新和改进&#xff0c;它的最新版本是 Vue 3。 在本文中&#xff0c;我们将探讨 V…...

就业内推 | 上市公司招网工,最高25k*14薪,六险一金

01 锐捷网络 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、承接本产品线&#xff08;无线或数通&#xff09;所有咨询、故障、网络变更等业务&#xff0c;响应内外部客户的业务响应需求&#xff0c;需要值班。 2、同时作为产品线技术力的核心&#xff0c;需要负责…...

低代码让开发变得不再复杂

文章目录 前言低代码 VS 传统开发为什么选择IVX&#xff1f;平台比对总结 前言 在数字化的时代背景下&#xff0c;企业都面临巨大的数字化转型的挑战。为了应对这样的挑战&#xff0c;企业软件开发工具和平台也在不断革新和发展。低代码开发平台随之应运而生&#xff0c;成为了…...

【前端客栈】使用CSS实现畅销书排行榜页面

&#x1f4ec;&#x1f4eb;hello&#xff0c;各位小伙伴们&#xff0c;我是小浪。大家都知道&#xff0c;我最近是在更新各大厂的软件测试开发的面试真题&#xff0c;也是得到了很大的反馈和好评&#xff0c;几位小伙伴也是成功找到了测开的实习&#xff0c;非常不错。如果能前…...

【周末闲谈】超越ChatGPT?科大讯飞星火认知大模型

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 前言星火名字的由来科大讯飞星火落地应用演示赶超ChatGPT的底气在哪里?“硬…...

第N2周:中文文本分类-Pytorch实现

目录 一、前言二、准备工作三、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 三、模型构建1. 搭建模型2. 初始化模型3. 定义训练与评估函数 四、训练模型1. 拆分数据集并运行模型 一、前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 …...

Salesforce许可证和版本有什么区别,购买帐号时应该如何选择?

Salesforce许可证分配给特定用户&#xff0c;授予他们访问Salesforce产品和功能的权限。Salesforce版本和许可证是不同的概念&#xff0c;但极易混淆。 Salesforce版本&#xff1a;这是对组织购买的Salesforce产品和功能的访问权限。大致可分为Essentials、Professional、Ente…...

接口测试怎么做?全网最详细从接口测试到接口自动化详解,看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 抛出一个问题&…...

DataStore入门及在项目中的使用

首先给个官网的的地址&#xff1a;应用架构&#xff1a;数据层 - DataStore - Android 开发者 | Android Developers 小伙伴们可以直接看官网的资料&#xff0c;本篇文章是对官网的部分细节进行补充 一、为什么要使用DataStore 代替SharedPreferences SharedPreferences&a…...

用Python爬取中国各省GDP数据

介绍 在数据分析和经济研究中&#xff0c;了解中国各省份的GDP数据是非常重要的。然而&#xff0c;手动收集这些数据可能是一项繁琐且费时的任务。幸运的是&#xff0c;Python提供了一些强大的工具和库&#xff0c;使我们能够自动化地从互联网上爬取数据。本文将介绍如何使用P…...

深度学习-第T5周——运动鞋品牌识别

深度学习-第T5周——运动鞋品牌识别 深度学习-第T5周——运动鞋品牌识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目3、查看数据 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 …...

自媒体的孔雀效应:插根鸡毛还是专业才华?

自媒体时代&#xff0c;让许多原本默默无闻的人找到了表达自己的平台。有人声称&#xff0c;现在这个时代&#xff0c;“随便什么人身上插根鸡毛就可以当孔雀了”。可是&#xff0c;事实真的如此吗&#xff1f; 首先&#xff0c;我们不能否认的是&#xff0c;自媒体确实为大众提…...

Linux系统优化

一、系统启动流程 1.centos6 centos6开机启动流程&#xff0c;传送门 2.centos7启动流程 二、系统启动运行级别 2.1 什么是运行级别 运行级别&#xff1a;指操作系统当前正在运行的功能级别&#xff1b; [rootweb01 ~]# ll /usr/lib/systemd/system lrwxrwxrwx. 1 root root…...

Java笔记_22(反射和动态代理)

Java笔记_22 一、反射1.1、反射的概述1.2、获取class对象的三种方式1.3、反射获取构造方法1.4、反射获取成员变量1.5、反射获取成员方法1.6、综合练习1.6.1、保存信息1.6.2、跟配置文件结合动态创建 一、反射 1.1、反射的概述 什么是反射? 反射允许对成员变量&#xff0c;成…...

实战应用:使用快马平台为vmware17部署生成企业级健康检查与配置方案

在实际的企业IT环境中&#xff0c;部署VMware vSphere 17&#xff08;以下简称VMware 17&#xff09;这类虚拟化平台往往不是简单的安装过程&#xff0c;而是需要综合考虑硬件兼容性、系统配置、安全策略等多方面因素。为了确保部署过程的顺利和后续运行的稳定&#xff0c;我们…...

JekyllNet .Net 版本的Jekyll , 你博客 文档的静态生成利器 。

若君只欲一篇而尽知 JekyllNet 今可如何用&#xff0c;此文即其总册。 项目入口 仓库地址&#xff1a;https://github.com/JekyllNet/JekyllNet文档网站&#xff1a;https://jekyllnet.helpGitHub Pages 站点入口(仓库 Pages)&#xff1a;https://jekyllnet.github.io/JekyllNe…...

HARMONYOS应用实例258:反比例函数图像

反比例函数图像 功能:绘制双曲线,点击图像上的点显示坐标,验证 xy=kxy=kxy=k 的恒等关系。 应用功能: 绘制反比例函数双曲线图像 y = k/x 可调节k值,范围从1到20...

PMOS 在电源管理中的高效应用

1. PMOS在高侧开关中的天然优势 我第一次用PMOS做高侧开关是在一个车载设备项目里。当时需要控制12V电源的通断&#xff0c;尝试了几种方案后&#xff0c;发现PMOS简直是这个场景的"天选之子"。相比NMOS&#xff0c;PMOS最大的优势就是控制逻辑简单直接——栅极拉低导…...

Vue3项目实战:5分钟搞定DeepSeek API对接,打造你的专属AI聊天助手

Vue3项目实战&#xff1a;5分钟搞定DeepSeek API对接&#xff0c;打造你的专属AI聊天助手 最近在重构个人博客时&#xff0c;突然想到如果能给访客加个智能问答助手应该挺酷的。作为一个长期混迹开源社区的全栈开发者&#xff0c;我习惯性先搜了圈现有方案——结果发现DeepSeek…...

实战演练:在快马平台用codex生成一个完整的react用户管理组件

今天想和大家分享一个实战案例&#xff1a;如何在InsCode(快马)平台用Codex快速生成一个React用户管理组件。整个过程比我预想的顺畅很多&#xff0c;特别适合需要快速原型开发的场景。 项目需求拆解 用户管理是后台系统的标配功能&#xff0c;这次要实现三个核心模块&#xff…...

DanKoe 视频笔记:人生经验课:给18岁自己的信

在本节课中&#xff0c;我们将学习一位28岁人士回顾过去&#xff0c;总结出的核心人生经验。这些经验旨在帮助年轻人&#xff0c;特别是那些感到迷茫、渴望超越平凡生活的人&#xff0c;建立自主性、明确目标并采取有效行动。我们将把这些经验整理成一套清晰的教程&#xff0c;…...

零基础友好:快马AI为你定制专属visual studio code图文安装与上手教程

作为一名从零开始学习编程的新手&#xff0c;我深刻体会到安装开发环境是很多人遇到的第一个"拦路虎"。最近在InsCode(快马)平台上发现了一个特别适合新手的Visual Studio Code安装教程项目&#xff0c;它完全解决了我的困惑。下面分享我的学习笔记&#xff0c;希望能…...

Python MCP服务端框架源码剖析(2024最新LTS版内核解密)

第一章&#xff1a;Python MCP服务端框架源码剖析&#xff08;2024最新LTS版内核解密&#xff09;Python MCP&#xff08;Modular Control Protocol&#xff09;服务端框架2024 LTS版标志着其架构从单体调度向轻量级异步模块总线的重大演进。该版本基于 Python 3.11 构建&#…...

3个突破限制步骤:res-downloader让网络资源获取变得无拘无束

3个突破限制步骤&#xff1a;res-downloader让网络资源获取变得无拘无束 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数…...