【C++】初步认识C++

  • 1. 初识C++
    • 1.1 C++概念相关
    • 1.2 C++发展史及其重要性
      • 1.2.1 发展史
      • 1.2.2 重要性
  • 2. C++关键字
  • 3. 命名空间
  • 4. 输入和输出

在这里插入图片描述
在这里插入图片描述

个人主页:C_GUIQU
归属专栏:【C++学习】

1. 初识C++

1.1 C++概念相关

C语言是结构化和模块化的语言,适合处理较小规模的程序。

【来源】1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。

【概念】C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

【性质】

  • 面向对象
  • 三大特性:封装,继承,多态。

【C语言和C++的关系】
在这里插入图片描述

1.2 C++发展史及其重要性

1.2.1 发展史

【C++的历史版本】
在这里插入图片描述

1.2.2 重要性

重要性不言而喻

【4个层次】

  • 第一个层次,C++基础 (平平常常)
  • 第二个层次,正确高效的使用C++ (驾轻就熟)
  • 第三个层次,深入解读C++ (出神入化)
  • 第四个层次,研究C++ (返璞归真)

【建议】中后期画思维导图总结。

【摘录】 最后,我说一说我的一些感受:

  • 这些年来的对于外企和国内感受—— 国外牛B的IT公司的工程能力并不见得比国内的要强多少,但是国外那些NB的IT公司的架构和设计能力远远超过国内的公司,最可怕的是,那些有超强架构和设计能力的“老程序员们”还战斗在一线,这些战斗在一线的老鸟的能力绝对超过100个普能的新手。
  • 对年轻程序员的感受——国内新一代的程序员们太浮燥了。老实说,对于大多数人来说,如果你没有编程到30岁,你还不能成为一个“合格”的程序员。所以,并不是编程编到30岁就玩完了,而是编程编到30岁才刚刚入门。这些不合格的程序,整天BS这个不好,那个不好的,而且喜欢速成,好大喜功。
  • 我是一个奔四的人了,编程就像登山一样,越往上爬人越少,所以,在我这个年纪还有想法,对编程还有热情的人不多了,基本上都是转Manager了。其实,什么职位,Title都是虚的,公司没了什么都没了,只有技术才是硬通货。而且,越是这个年纪还在玩编程玩技术的人,其实其经验和能力都是比较强的,都是中坚力量,如果还有其它这个年纪和我一样的人,求交往。

2. C++关键字

C语言32个关键字,C++总计63个关键字。
后期学习慢慢了解。

asm 
do 
if 
return 
try 
continue 
auto 
double 
inline 
short 
typedef 
for 
bool 
dynamic_cast 
int 
signed 
typeid 
public 
break 
else 
long 
sizeof 
typename 
throw 
case 
enum 
mutable 
static 
union 
wchar_t 
catch 
explicit 
namespace 
static_cast 
unsigned 
default 
char 
export 
new 
struct 
using 
friend 
class 
extern 
operator 
switch 
virtual 
register 
const 
false 
private 
template 
void 
true 
const_cast 
float 
protected 
this 
volatile 
while 
delete 
goto 
reinterpret_cast

3. 命名空间

【引言】

//C语言命名冲突报错
#include<stdio.h>
#include<stdlib.h>int rand = 10;int main()
{int a = 1;printf("%d\n",rand);return 0;
}

C++中引入命名空间(namespace)用以解决这类问题。

【概念】

命名空间(namespace)是 C++ 提供的一种解决命名冲突问题的方法,可以将不同作用域的标识符(如变量、函数、类等)组织在一起。

【性质】

  • 是用来组织代码并避免命名冲突的一种机制。
  • 避免命名冲突:不同的命名空间中可以有相同名称的变量和函数,彼此不会产生冲突。
  • 模块化组织:更好地组织和管理代码,提高可维护性。
  • 作用域控制:控制变量和函数的可见范围,避免全局污染。

定义命名空间

namespace myNamespace
{int a;//定义变量void fun();//定义函数
}

使用命名空间中的成员

作用域运算符 :: :在C++中用于访问命名空间的成员和限定类的成员函数的定义位置。
可以理解为访问操作符,用于访问变量和函数。

namespace myNamespace
{int a;void fun();myNamespace :: a = 1;//使用变量myNamespace :: fun();//使用函数
}

嵌套命名空间

namespace 1
{namespace 2//嵌套{int a;void fun();}
}
myNamespace::a = 1;
myNamespace::fun();

使用 using声明

#include <iostream>namespace NamespaceA
{int a = 5;
}int main()
{using NamespaceA::a; // 使用using声明std::cout << "a = " << a << std::endl; // 直接使用a,无需NamespaceA::前缀return 0;
}

使用 using namespace指令

#include <iostream>namespace NamespaceA 
{int a = 5;void func() {std::cout << "Hello from NamespaceA!" << std::endl;}
}int main() 
{using namespace NamespaceA; // 使用using namespace指令std::cout << "a = " << a << std::endl; // 直接访问命名空间NamespaceA中的变量afunc(); // 直接调用命名空间NamespaceA中的函数funcreturn 0;
}//【输出】
/*
a = 5
Hello from NamespaceA!
*/

【总示例】

#include <iostream>// 定义命名空间NamespaceA
namespace NamespaceA 
{int a = 5;// 定义嵌套命名空间NamespaceBnamespace NamespaceB {int b = 10;}
}int main() 
{// 使用 using声明using NamespaceA::a;std::cout << "Using declaration: a = " << a << std::endl;// 使用 using namespace指令using namespace NamespaceA;std::cout << "Using namespace directive: a = " << a << std::endl; // 可直接使用a// 使用嵌套命名空间NamespaceB中的成员std::cout << "NamespaceA::NamespaceB::b = " << NamespaceA::NamespaceB::b << std::endl;return 0;
}

【输出】

Using declaration: a = 5
Using namespace directive: a = 5
NamespaceA::NamespaceB::b = 10

using和using namespace两者区别:

  • using声明:通过using 命名空间::成员的方式,可以将命名空间中的特定成员引入当前作用域,只能引入命名空间中的指定成员,不会引入整个命名空间。
  • using namespace指令:通过using namespace 命名空间的方式,可以将整个命名空间的所有成员引入当前作用域,可以直接访问整个命名空间中的成员,但可能会引入命名空间中的不必要成员,增加命名冲突的可能。

4. 输入和输出

#include<iostream>int main()
{std :: cout << "Hello C++!" << std :: endl;return 0;
}

【输出】

Hello C++!

【优化/简化】

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

【输出】

Hello world!

【说明】

  • 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream>头文件以及按命名空间使用方法使用std。
  • cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。
  • <<是流插入运算符,>>是流提取运算符。
  • 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
  • C++的输入输出可以自动识别变量类型。
  • 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识。
    注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用+std的方式。

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

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

相关文章

Qt - 如何在新线程 (QThread)中使用一个进程 (QProcess)?

在Qt中&#xff0c;QThread 用于处理后台任务&#xff0c;而 QProcess 用于启动和管理外部程序。如果你想在一个新的 QThread 中使用 QProcess&#xff0c;你需要了解 QProcess 并不是专门为在特定线程中运行而设计的。实际上&#xff0c;QProcess 通常在创建它的线程&#xff…

Android Bitmap 和Drawable的区别

Bitmap 和 Drawable 是 Android 图形绘制的两种常用方式&#xff0c;它们有各自的特点和使用场景。下面将详细解释它们之间的区别&#xff0c;并通过示例代码说明如何使用它们。 Bitmap 解释 Bitmap 是一种用于存储图像像素数据的类&#xff0c;通常用于图像处理和操作。Bit…

ctfshow-web入门-命令执行(web118详解)Linux 内置变量与Bash切片

输入数字和小写字母&#xff0c;回显 evil input 查看源码&#xff0c;发现这里会将提交的参数 code 传给 system 函数 使用 burpsuite 抓包进行单个字符的模糊测试 fuzz&#xff1a; 发现过滤掉了数字和小写字母以及一些符号&#xff0c;下面框起来的部分是可用的 结合题目提…

通过自研大批量数据导入导出框架,流式处理、异步执行、流量拥塞控制,智能多线程并发入库,高并发场景下任务进行限流排队,实现单机百万级数据每秒2500单导入

自研大批量数据导入导出框架&#xff0c;实现高效率的数据操作通常需要考虑以下几个关键技术点&#xff1a; 1. **流式处理&#xff08;Streaming&#xff09;**&#xff1a; - 数据以流的形式被处理&#xff0c;而不是一次性加载到内存中。这可以显著减少内存使用&#xf…

【C++】开源:命令行解析库CLI11配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍命令行解析库CLI11配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#x…

ETCD概述--使用/特性/架构/原理

ETCD概述 ETCD是一个高度一致的分布式键值存储, 它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据(高可用, 强一致性)​全局的配置服务中心. 本文将介绍其特性、相关操作和常见的应用场景. 如果想了解更多, 请查阅我的技术博客: https://dingyuqi.com 特性 …

开启IT探索之旅:高考后的暑期学习指南

方向一&#xff1a;基础课程预习指南 1. 计算机科学导论 这门课程是所有IT专业的基础&#xff0c;它将带你了解计算机的基本原理、发展历史及计算机科学的主要研究领域。可以通过以下资源进行学习&#xff1a; 书籍&#xff1a;《计算机科学概论》 by Brookshear在线课程&#…

python 使用selenium谷歌如何设置无头模式

在使用Selenium和ChromeDriver时&#xff0c;如果你想要在Python中设置无头模式&#xff08;headless mode&#xff09;&#xff0c;你需要在创建Chrome WebDriver实例时通过ChromeOptions来设置。无头模式允许你在没有图形界面的环境中运行Chrome浏览器&#xff0c;这在进行自…

(单片机)

一、串口 (Serial Port / UART) 串口(Serial Port)、IC(Inter-Integrated Circuit)、SPI(Serial Peripheral Interface)是三种常用的微控制器之间的通信协议。下面我将分别解释这些通信方式的概念、特点和常见使用场景,并提供一个简单的示例代码框架。 串口 (Serial P…

frp http转发

解决HTTP协议API中域名变更后,已部署设备无法数据上传问题 HTTP协议API中包含域名 通过http://api_domain.com/xxx/xxx/xxx/xxx上传数据到WEB服务器。 变更前 api_domain.com 绑定在2xx.xxx.xxx.xxx上面。2xx.xxx.xxx.xxx部署了需要访问的WEB服务。 变更后 new_domain.c…

新章节:全设备通用调度算法-通讯重构

新章节&#xff1a;全设备通用调度算法-通讯重构 文章目录 新章节&#xff1a;全设备通用调度算法-通讯重构前言一、重构了TCP和UDP通讯二、优化了OPC和OPCUA三、升级了监控客户端四、升级了通讯的图形化其他升级 前言 现在真的很懒也很少写代码了&#xff0c;写代码和更新进度…

ActiViz中的颜色映射表vtkLookupTable

文章目录 一、简介二、VtkLookupTable的创建与初始化三、设置数据范围四、颜色映射设置五、不透明度设置六、自定义颜色映射七、 不连续性颜色映射八、 预设颜色映射方案九、可视化效果优化十、与其他VTK组件的整合十一、 动态调整映射表十二、保存和加载颜色映射表一、简介 V…

数据赋能(137)——开发:数据映射——实施过程、应用特点

实施过程 数据映射的实施过程通常涉及以下几个关键步骤&#xff1a; 定义阶段&#xff1a; 明确需要移动或映射的数据&#xff0c;包括源数据和目标数据的格式、结构以及传输频率。定义表格、每个表格中的字段&#xff0c;以及移动后字段的格式。映射数据阶段&#xff1a; 将…

webSocket网页通信---使用js模拟多页面实时通信

webSocket是什么 WebSocket是一种先进的网络技术&#xff0c;它提供了一种在单个TCP连接上进行全双工通信的能力。传统的基于HTTP的通信是单向的&#xff0c;即客户端发起请求&#xff0c;服务器响应请求&#xff0c;然后连接关闭。但是&#xff0c;WebSocket允许服务器和客户端…

欧盟,又出了新规-通用充电器新规通用充電器的 RED 修正案如何办理?

欧盟&#xff0c;又出了新规-通用充电器新规通用充電器的 RED 修正案如何办理&#xff1f; 欧盟新规委员会发布《通用充电器指令》指南通用充電器的 RED 修正案办理流程&#xff1a; 2024年5月7日&#xff0c;欧盟委员会发布《通用充电器指令》指南&#xff0c;修订了《无线…

Linux之进程控制(下)

目录 进程替换的概念 进程替换的函数 execl​编辑 execlp execle execv execvp execve 上期&#xff0c;我们学习了进程创建&#xff0c;进程终止和进程等待&#xff0c;今天我们要学习的是进程控制中相对重要的板块------进程替换。 进程替换的概念 在进程创建时&…

【 香橙派 AIpro评测】大语言模型实战教程:香橙派 AIpro部署LLMS大模型实站(保姆级教学)

引言 OrangePi AIpro 这块板子作为业界首款基于昇腾深度研发的AI开发板&#xff0c;一经发布本博主就火速去关注了&#xff0c;其配备的 8/20TOPS澎湃算力是目前开发板市场中所具备的最大算力&#xff0c;可谓是让我非常眼馋啊&#xff01;这么好的板子那必须拿来用用&#xff…

LeetCode热题100刷题6:160. 相交链表、206. 反转链表、234. 回文链表、141. 环形链表、142. 环形链表 II

160. 相交链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode…

QDockWidget类详解

一.QDockWidget类概述 1.QDockWidget类 QDockWidget类提供了一个特殊的窗口部件&#xff0c;它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。 QDockWidget类提供了dock widget的概念&#xff0c;dock widget也就是我们熟悉的工具面板或者是工具窗口。Do…

nginx转发的问题

我在项目配置的时候遇到一个问题&#xff1a; 配置了域名转发&#xff0c;且配置了https nginx配置如下&#xff1a; server {listen 443 ssl;server_name yourdomain.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;loca…