【C++开篇 -- 入门语法篇】

C++学习笔记---001

  • C++知识开篇
    • 1、介绍C++的背景以及与C语言的区别
      • 1.1、什么是C++?
      • 1.2、C++的背景
    • 2、C++与C语言的区别
    • 3、C++优化命名空间
      • 3.1、C中的问题
      • 3.2、命名空间的应用
    • 4、总结

C++知识开篇

前言:
首先,C++兼容C,C++在C语言范畴上增添了一些优化,它支持多种编程范式,包括过程式编程、面向对象编程和泛型编程。C++是C语言的扩展,添加了许多新特性,如类、模板、异常处理等。接下来,随着这篇文章推开C++知识的大门吧。
/知识点汇总/

1、介绍C++的背景以及与C语言的区别

1.1、什么是C++?

C++是一种通用的、支持多重编程范式的计算机程序设计语言,它综合了高级语言和低级语言的特点。它既有高级语言的易用性,可以编写出简洁、易读的代码,同时也有低级语言的灵活性,可以直接操作内存和硬件。C++擅长面向对象程序设计,它支持类和对象的概念,可以实现封装、继承和多态等面向对象开发的四大特性。此外,C++还提供了丰富的标准库,包括STL(标准模板库)、iostream、fstream等,为程序员提供了许多常用的数据结构和算法。

1.2、C++的背景

C++诞生于1983年,由Bjarne Stroustrup在贝尔实验室开发。其初衷是创建一种语言,既具有C语言的系统级特性,又能支持面向对象编程。随着语言的成熟和扩展,C++变得越来越复杂,但其核心仍然保持了与C语言的高度兼容性。C++广泛应用于各种领域,包括操作系统、编译器、硬件驱动、游戏开发、网络编程等。

2、C++与C语言的区别

1.面向对象编程:C++支持面向对象编程,包括类、对象、继承、多态等概念。而C语言是一种过程式编程语言,不支持面向对象编程。
2.类型安全:C++是一种强类型语言,具有严格的类型检查。相比之下,C语言的类型检查较为宽松,容易导致类型错误。
3.内存管理:C++引入了自动内存管理特性,如new和delete操作符,以及智能指针等。这些特性有助于减少内存泄漏和悬挂指针等问题。C语言需要程序员手动管理内存,包括分配和释放内存。
4.异常处理:C++支持异常处理机制,可以使用try、catch和throw关键字来处理运行时错误。而C语言没有内置的异常处理机制,通常使用错误码或返回值来表示错误。
5.模板和泛型编程:C++引入了模板和泛型编程的概念,允许程序员编写与数据类型无关的代码。这使得代码更加通用和可重用。C语言不支持模板和泛型编程。
6.标准库:C++具有丰富的标准库,包括STL(标准模板库)、iostream、fstream等,提供了许多常用的数据结构和算法。而C语言的标准库相对较小,需要程序员自行实现许多常用功能。

小结:
总之,C++相对于C语言具有更多的特性和优势,使得编程更加高效、安全和可维护。然而,由于C++的复杂性,对于初学者来说,学习曲线可能较为陡峭。因此,在学习C++之前,建议先掌握C语言的基础知识。

3、C++优化命名空间

C++解决了C语言中,重复命名的问题。即,解决程序员命名和库中的命名重复。

3.1、C中的问题

起初C语言中,全局变量和局部变量命名一样时,默认执行局部变量。

#include <stdio.h>
//#include <stdlib.h>
int rand = 10;
int main()
{int rand = 11;printf("hello world\n");printf("rand1 = %d\n", rand);//11printf("rand2 = %d\n", rand);//11return 0;
}

C++方法一:C++现在引出 :: 域操作符
::域作用限定符

#include <stdio.h>
//#include <stdlib.h>
int rand = 10;
int main()
{int rand = 11;printf("hello world\n");printf("rand1 = %d\n", rand);//11printf("rand2 = %d\n", ::rand);//10//::左边不指定时,默认是全局域return 0;
}

C++方法二:命名空间
引出namespace关键字 — 划分独立的域
补充编译器搜索原则:

1.未指定时,先当前局部域,后全局域
2.指定时,通过::直接指定域搜索

#include <stdio.h>
namespace bit1
{int rand = 0;
}
namespace bit2
{int rand = 1;
}
int main()
{int rand = 11;printf("hello world\n");printf("rand1 = %d\n", bit1::rand);//0 ---指定了bit1域搜索printf("rand2 = %d\n", bit2::rand);//1 ---指定了bit2域搜索printf("rand2 = %d\n", rand);//11return 0;
}

另外,不仅仅是变量,还可以是函数、结构体等命名文体,都可以解决命名冲突的问题,而且namespace指定的域名可以相同,但是默认执行时会合并其内容,不过域名再相同就对解决重命名就无意义了。

#include <stdio.h>
namespace bit1
{int rand = 0;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
namespace bit2
{int rand = 1;
}
int main()
{int rand = 11;printf("hello world\n");printf("rand1 = %d\n", bit1::rand);//0 ---指定了bit1域搜索printf("rand2 = %d\n", bit2::rand);//1 ---指定了bit2域搜索printf("rand2 = %d\n", rand);//11//函数printf("Add():%d\n", bit1::Add(1, 2));//结构体//错误位置bit1::struct Node phead;struct bit1::Node phead;//bit::是指定在结构体的变量名前return 0;
}

3.2、命名空间的应用

通常结合using使用,作用是展开空间域

#include <stdio.h>namespace bit1
{int rand = 0;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}using namespace bit1;//展开bit1域,bit1内容可在工程下其它文件中。int main()
{struct bit1::Node phead;return 0;
}
#include <iostream>
using namespace std;//std是所有C++库的命名空间
int main()
{//std::cout << "hello world" << std::endl;cout << "Hello World" << endl;return 0;
}

小结
命名空间关键字:namespace 常用于解决命名冲突和展开

C++中,名称(name)可以是符号常量、变量、宏、函数、结构体、枚举、类和对象等等。而在大型工程中,难免会有重名的现象;
命名空间namespace,就是C++引入的一种解决名称冲突的机制

4、总结

C语言中

需要通过人为操作符号的名称,来限制符号的作用域和链接属性来完解决名称冲突的。
比如:
1.同一个C文件中的全局变量 / 函数加一个统一的前缀进行区分,
2.通过作用域的掩蔽规则来进行覆盖(在大文件中如果出错很难发现) C文件中的全局变量和函数都是extern链接属性;
3. 可以用static将无需跨文件访问的全局变量和函数限制在内链接属性中

C++

namespace有三种使用方法:
1.使用时对符号附带命名空间的名称
2.使用前对该符号进行声明,后面直接使用该符号
3.使用前声明整个命名空间,后面直接使用该命名空间中的任何符号

三种方式:

1.指定访问:std::cout
2.展开常用访问: 常用的展开:using std::cout; using std::endl;
3.展开访问: using namespace(std慎用,适用小型项目/日常练习)

不管哪种方式,其本质是控制域,全局域和局部域
举例:

#include <iostream>
using std::cout;
using std::endl;
namespace bit
{namespace zs{void Push(){cout << "zs" << endl;}}namespace ls{void Push(){cout << "ls" << endl;}}
}
int main()
{int m = 0;std::cin >> m;for (int i = 0; i < m; i++){cout << "hello world" << endl;}bit::zs::Push();bit::ls::Push();return 0;
}

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

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

相关文章

WPF中样式

WPF中样式:类似于winform中控件的属性 <Grid><!-- Button属性 字体大小 字体颜色 内容 控件宽 高 --><Button FontSize="20" Foreground="Blue" Content="Hello" Width="100" Height="40"/></Grid&g…

proteus8.15图文安装教程

proteus8.15版本可以用STM32系列单片机来进行仿真设计&#xff0c;比7.8版本方便多了&#xff0c;有需要的朋友们可以在公众号后台回复 proteus8.15 获取软件包。 1、下载好软件包&#xff0c;解压如下&#xff0c;右键proteus8.15.sp1以管理员身份运行。 2、第一次安装&#x…

UE5 动态加载资源和类

// Called when the game starts or when spawned void AMyActor::BeginPlay() {Super::BeginPlay();if (MyActor){UE_LOG(LogTemp,Warning,TEXT("MyActor is %s"),*MyActor->GetName());}//动态加载资源UStaticMesh* MyTmpStaticMesh LoadObject<UStaticMesh…

什么时候会触发FullGC?描述一下JVM加载class文件的原理机制?

什么时候会触发 FullGC&#xff1f; 除直接调用 System.gc 外&#xff0c;触发 Full GC 执行的情况有如下四种。 1. 旧生代空间不足 旧生代空间只有 在新生代对象转入及创建为大对象、大数组时才会出现不足的现象&#xff0c;当执行 Full GC 后空间仍然不 足&#xff0c;则…

ALINX黑金AXU3EGB 开发板用户手册RS485通信接口图示DI RO信号方向标识错误说明

MAX3485这类RS485芯片&#xff0c;DI是TTL信号输入&#xff0c;RO是TTL信号输出 如下图是MAX3485手册规格书。 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-11-1 PL 端 485 通信的连接示意图&#xff0c;MAX3485芯片的DI RO信号输入输出标识方向是错误的&#xff0c;应为蓝…

Redis 只会用缓存?16种妙用让同事直呼牛X

1、缓存2、数据共享分布式3、分布式锁4、全局ID5、计数器6、限流7、位统计8、购物车9、用户消息时间线timeline10、消息队列11、抽奖12、点赞、签到、打卡13、商品标签14、商品筛选15、用户关注、推荐模型16、排行榜图片 1、缓存 String类型 例如:热点数据缓存(例如报表、明…

Spring Farmework,Spring Boot,Spring MVC 分别是什么?它们的关系又是什么?

Spring Framework是一个综合性的Java开发框架&#xff0c;提供了一系列的模块和功能来简化企业级应用程序的开发。Spring框架包括IoC&#xff08;Inversion of Control&#xff09;容器、AOP&#xff08;Aspect-Oriented Programming&#xff09;支持、数据访问、事务管理、模型…

机器学习---HMM前向、后向和维特比算法的计算

1. HMM import numpy as np# In[15]:class HiddenMarkov:def forward(self, Q, V, A, B, O, PI): # 使用前向算法N len(Q) # 状态序列的大小M len(O) # 观测序列的大小alphas np.zeros((N, M)) # alpha值T M # 有几个时刻&#xff0c;有几个观测序列&#xff0c;就有…

小米4A路由器如何刷OpenWRT并结合内网穿透实现公网远程访问

文章目录 推荐前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 推荐 前些天发现了一个巨牛的人工智…

红队学习笔记Day6 --->干货分享

今天看到这样的一个东西&#xff0c;好好好&#xff0c;有点恐怖&#x1f613;&#x1f613;&#x1f631;&#x1f631;&#x1f631;&#x1f631; 我就想网安是不是也有这种东西&#xff1f; 我来试试 icmp&#xff0c;RDP&#xff0c;arp&#xff0c;dhcp&#xff0c;nat&a…

JavaScript排序

直接看代码 <table border"1" cellspacing"0"><thead class"tou"><tr><td>选择按钮</td><td>汽车编号</td><td>汽车图片</td><td>汽车系列名称</td><td>汽车能源</…

Android 基础技术——Binder 机制

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于Binder 机制 什么是Binder 机制&#xff1a;Binder 是一种进程间通信机制 驱动&#xff1a;Binder 是一个虚拟物理设备驱动 应用层&#xff1a;Binder 是一个能发起通信的 Java 类 为什么要使用Bind…

react封装通用Modal弹窗组件

目录 1、【src/component/modal/hoc.js】 2、【src/component/modal/componentModal.js】 3、【src/page/projectView.js】 【说明】&#xff1a;后台管理的项目中会经常遇到弹窗&#xff0c;于是封装了一个简单的公共弹窗组件 这个公共组件不适用复杂的功能&#xff0c;简单的…

20. 【Linux教程】emacs 编辑器

前面小节介绍了如何使用 vim 编辑器和 nano 编辑器&#xff0c;本小节介绍 emacs 编辑器&#xff0c;emacs 编辑器最开始是作为控制台的编辑器&#xff0c;并且 emacs 编辑器仍然提供最早的命令行模式。 1. 检查 Linux 系统中是否安装 emacs 编辑器 使用如何命令检查 emacs 编…

SpringIOC之support模块SimpleThreadScope

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

JavaScript:循环与遍历

文章目录 循环ForFor-of (ES6)For-inWhileDo-While注意以上for与while方法均支持break与continue 数组遍历(不支持break与continue&#xff0c;return只是结束当前的回调函数执行)Array.prototype.forEach()Array.prototype.map()Array.prototype.filter()Array.prototype.redu…

PAM | 账户安全 | 管理

PAM PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插入式身份验证模块&#xff09;是一个灵活的身份验证系统&#xff0c;允许我们通过配置和组合各种模块来实现不同的身份验证策略。 在 Linux 或类 Unix 系统中&#xff0c;常见的 PAM 模块包括以下几种类…

NLP-词袋模型

词袋模型是自然语言处理中常用的一种文本表示方法&#xff0c;用于将文本转换为数值型向量&#xff0c;以便于计算机进行处理和分析。在词袋模型中&#xff0c;文本被看作是一个由词语组成的集合&#xff0c;而每个词语都是独立的&#xff0c;不考虑它们在文本中的顺序和语境关…

Fabric中的溯源方法

背景 在Fabric链码中&#xff0c;我们可以使用PutState方法对一个key的值进行覆盖&#xff0c;当我们再使用GetState查询时是最新的值。如果我们希望找到这个key的修改记录&#xff0c;我们可以使用溯源方法GetHistoryForKey。完整源码链接&#xff1a;https://github.com/hyp…

零基础搭建 Kubernetes 集群

零基础搭建 Kubernetes 集群 1、简介 在数字化时代&#xff0c;容器技术已经变成了软件开发和部署的标准&#xff0c;而在众多容器管理工具中&#xff0c;Kubernetes&#xff08;简称为 K8s&#xff09;凭借其高效的资源管理、弹性伸缩和自我修复的能力&#xff0c;成为了行业…