嵌入式学习记录5.27(c++基础1)

目录

一.C和C++的区别

二.输入输出流类

2.1输出cout

2.2输入cin

三.命名空间

2.1使用命名空间中的标识符

2.2命名空间中声明函数

2.3命名冲突问题

2.4匿名空间

2.5命名空间添加,嵌套,重命名

四.字符串的使用

4.1string类

4.2C风格和C++风格字符串的转化

4.3string类中常用的函数

五.bool类型

六思维导图/练习


一.C和C++的区别

i)头文件的区别

C++中的头文件一般没有.h,C++对C语法做了兼容

所以C中的头文件,仍然可以在C++文件中使用,一般去掉C中头文件的.h,在前面加上c

例: stdio.h ----> cstdio

ii)拓展名的区别

C语言:.c ----->使用gcc编译器

C++: .cpp , .C ------>使用g++编译器,g++比gcc编译器语法更加严格(主函数的返回值类型不能修改)

iii)语法区别(语法的扩充)

  1. 命名空间
  2. 函数重载(一名多用)
  3. 字符串的使用(string类型)
  4. 引用(和C中的指针类似)
  5. 面向对象的特征(封装、继承和多态) C++是面向对象语言
  6. STL标准模板库(前面C写的所有数据结构C++中可以直接使用)
  7. 模板编程
  8. 智能指针(C++11开始的新特性)
  9. lambda表达式

二.输入输出流类

2.1输出cout

1)cout的基本使用

cout是ostream类提供的类对象,printf()是C库中的函数

cout可以实现级联的输出(连续输出多个)

如果使用cout,需要导入头文件,引入命名空间std

cout << a << endl;

2)cout控制格式的输出

通过关键字控制输出格式,或者通过函数控制输出格式 #include

setbase(); 控制进制输出

setw(); 控制宽度输出 ---->left关键字

setprecison(); 控制包含小数点位数输出

2.2输入cin

是istream输入流提供的类对象

在istream中对>>运算符进行了运算符重载,>>变成输入运算符

仍然不需要格式符,会根据类型自动推导

cin >> a;

三.命名空间

在C++中,命名空间(Namespace)是一种避免命名冲突的方式,它可以把一组具有相似功能的实体(包括类、函数、变量等)封装在一起,形成一个独立的区域。命名空间可以有效地防止在大型程序中因命名重复而导致的冲突问题。

namespace 命名空间名 { //标识符(变量名、函数名、类型名) }

2.1使用命名空间中的标识符

定义在命名空间中的标识符,不能直接使用,需要导入后再使用

i)全局导入命名空间

using namespace 命名空间名; ---->该语句表示,导入命名空间中的所有标识符,在该语句后面,命名空间中的所有标识符可以任意使用(一般写在头文件下方,主函数上方)

ii)局部导入命名空间中标识符

:: ----->域限定符

在哪里使用标识符,就在哪个位置导入标识符

std::cout << "hello" << std::endl; //只在使用cout的位置导入标识符std

iii)导入命名空间中的部分标识符

使用using 命名空间名::标识符名; ----->在该语句后,可以使用导入的指定标识符

2.2命名空间中声明函数

在命名空间中声明函数,在命名空间外定义函数,需要在函数名前加上命名空间名::函数名

namespace Test
{//存放标识符//定义变量int num = 100;//定义结构体类型struct Stu{int age;};//声明函数void show();
}//定义命名空间中的show()函数
void Test::show()
{cout << "hello" << std::endl;
}

2.3命名冲突问题

何时发生命名冲突,当同时可以访问到两个同名标识符时发生命名冲突

i)命名空间和局部变量冲突

如果不导入命名空间,不会发生冲突

即使导入了命名空间,默认访问局部变量,也不发生访问的冲突

如果导入命名空间后,想要访问命名空间中的标识符,在标识符前加上命名空间名::

ii)命名空间和全局变量冲突

如果不导入命名空间中的标识符,不会发生冲突,直接访问全局变量

导入命名空间中标识符后发生冲突:

  1. 访问命名空间中的标识符: 命名空间名::标识符名
  2. 访问全局变量: ::标示符名(访问全局变量)iii)两个命名空间中的标识符冲突

iii)两个命名空间中的标识符冲突

必须是在同时导入了两个命名空间时才会发生标识符冲突问题

解决方式: 命名空间名::标识符 ----->直接指定访问某一个命名空间中的标识符

2.4匿名空间

没有名字的命名空间就叫做匿名空间

namespace { //标识符 }

匿名空间中的标识符,无需使用using导入,也可以访问

如果发生命名冲突,可以使用 ::标识符名,来访问匿名空间中的标识符

如果存在命名空间和匿名空间标识符冲突的情况,(尽量不要导入有名字的命名空间中的标识符)

如果匿名空间和全局变量冲突 ::标识符名(默认访问全局变量)

2.5命名空间添加,嵌套,重命名

1)命名空间的添加

如果定义了同名的命名空间,会自动合并成同一个命名空间

(将后续定义的内容添加到原有的命名空间中)

2)命名空间的嵌套

存在嵌套命名空间时,只需要根据定义顺序,通过域限定符一层一层访问下去即可

3)命名空间的重命名

格式

namespace 新名字 = 旧名字;

四.字符串的使用

4.1string类

string类

是C++中封装好的一个类(可以理解为是一种数据类型)

定义字符串:string 变量名;

#include <iostream>
using namespace std;
int main()
{string s1;     //定义了一个字符串变量s1string s2 = "hello";   //定义了一个字符串变量s2使用hello初始化cout << "s1 = " << s1 << endl;cout << "s2 = " << s2 << endl;string s3(5,'a');  //定义了一个字符串变量s3使用5个a进行初始化cout << "s3 = " << s3 << endl;string s4("hi");   //定义了一个字符串变量s4使用hi字符串初始化cout << "s4 = " << s4 << endl;string s5 = s4;    //定义了一个字符串变量s5使用s4初始化cout << "s5 = " << s5 << endl;cout << s3+s2 << endl;   //stringl类对象,可以直接通过运算符完成拼接return 0;
}

4.2C风格和C++风格字符串的转化

C风格的字符串可以直接转换成C++风格

C++风格的字符串,不能直接转换成C风格的字符串,需要借助于特殊的函数

data(),c_str(); //这两个函数的返回值,都是char*类型的指针

#include <iostream>
#include <cstring>
using namespace std;int main()
{string s1 = "a";     //定义了一个字符串变量s1string s2 = "hello";   //定义了一个字符串变量s2使用hello初始化cout << "s1 = " << s1 << endl;cout << "s2 = " << s2 << endl;cout << strcmp(s1.data(),s2.c_str()) << endl;return 0;
}

4.3string类中常用的函数

i)at()

按位置访问字符串

使用at访问字符串时超出字符串范围代码会抛出异常

#include <iostream>
using namespace std;
int main()
{string s1 = "abcdefg";cout << s1[0] << endl;   //通过下标的方式访问字符串中的字符cout << s1[100] << endl;cout << s1.at(100) << endl;   //直接代码抛出异常,不继续向后执行cout << s1.at(0) << endl;   //不会输出return 0;
}

ii)empty()/clear()

empty():判断字符串是否为空

clear():清空字符串

iii)  length()/size()

求字符串的长度

输入字符串

getline()的两个参数,第一个参数是输入流对象,第二个参数输入的字符串变量

string s1; getline(cin,s1);

五.bool类型

常用在函数的返回值

  1. C语言中不直接支持bool类型,但是C++中直接支持bool类型,结果是一个逻辑值

非0即1,true和false

  1. bool类型的变量可以使用true和false赋值,也可以使用数值赋值
  2. cout输出时,默认使用数字表示法输出bool类型的值
  3. 如果想要使用单词输出bool类型的值,在输出时加上boolalpha,想要恢复数字表示法加上noboolalpha
  4. bool类型的大小1Byte,因为计算机分配内存的基本单位是字节
  5. #include <iostream>
    using namespace std;int main()
    {bool t = 0.01;cout << t << endl;cout << boolalpha << t << endl;     //truecout << noboolalpha << t << endl;   //1 cout << sizeof(t) << endl;   //1Bytereturn 0;
    }

六思维导图/练习

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

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

相关文章

Java面试八股之线程池是怎么实现的

线程池是怎么实现的 线程池是一种基于池化技术的线程管理方式&#xff0c;通过预先创建一定数量的线程并保持在池中待命&#xff0c;从而在有任务来临时能够快速分配线程处理任务&#xff0c;而无需频繁创建和销毁线程&#xff0c;以此达到提升系统性能、减少资源消耗的目的。…

推荐《从零开始大模型开发与微调》

大模型是深度学习是当前AI和NLP研究与产业中最重要的方向之一。 本书用PyTorch 2.0作为学习大模型的基本框架&#xff0c;以ChatGLM为例详细讲解大模型的基本理论、算法、程序实现、应用实战以及微调技术&#xff0c;为读者揭示大模型开发技术。 《从零开始大模型开发与微调&…

Windows10映射网络驱动器之后不显示映射盘

目录 背景解决步骤1、按 Windows R 打开运行2、打开注册表编辑器3、 System上新建-- DWORD(32bit)4、对新建的文件重命名5、将EnableLinkedConnections的数值改为16、退出注册表编辑器&#xff0c;重启系统。 知识扩展断开连接备份注册表 背景 目前有一台NAS服务器,和一台lin…

工厂模式的三种实现方式

文章目录 1.引出工厂模式具体需求 2.传统模式1.类图2.目录结构3.pizzastore 用于设计pizza1.Pizza.java 抽象的Pizza类型2.CheesePizaa.java CheesePizaa3.GreekPizza.java GreekPizza 4.order 用于订购和制作pizza1.OrderPizza.java 制作pizza2.PizzaStore.java 订购pizza 5.优…

【Redis】 关于列表类型

文章目录 &#x1f343;前言&#x1f340;常见操作命令介绍&#x1f6a9;lpush&#x1f6a9;lpushx&#x1f6a9;rpush&#x1f6a9;rpushx&#x1f6a9;lrange&#x1f6a9;lpop&#x1f6a9;rpop&#x1f6a9;lindex&#x1f6a9;linsert&#x1f6a9;llen&#x1f6a9;lrem&…

“按摩”科技?

都说A股股民是特别善于学习的&#xff0c;这不市场又现新概念——“按摩科技”&#xff0c;成立仅6年&#xff0c;把上门按摩干到35亿营收也是没谁了&#xff0c;现在号称有1000万用户&#xff0c;3万家入驻商户数的按摩平台&#xff0c;难道就凭借2.5万名女技师&#xff0c;活…

【Django】中间件实现钩子函数预处理和后处理,局部装饰视图函数

在app文件夹里新建middleware.py继承MiddlewareMixin&#xff0c; 编写中间件类&#xff0c;重写process_request、process_response钩子函数 from django.http import HttpRequest, HttpResponse from django.utils.decorators import decorator_from_middleware from django…

关于pytest中用例名称使用中文乱码的解决

场景&#xff1a;使用pytest.mark.parametrize装饰器为用例自定义名称时&#xff0c;运行显示乱码。如下图所示&#xff1a; 解决方案&#xff1a; 1.在根目录 pytest.ini中增加一行代码 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

NAT 网络转换

NAT(Network Address Translation) 网络地址转换 0x01 NAT 简介 为什么要使用 NAT IPv4 网络地址紧缺&#xff0c;从而出现了私有网段&#xff0c;来补充地址&#xff0c;但私有网段不课访问 internet 所以出现了 NAT 地址转换&#xff0c;将私有地址&#xff0c;转换为公网 I…

一口气看完es(上)

此系列博客分为上中下3篇&#xff1a;上篇是关于es的概念和对数据的增删改操作&#xff0c;中篇是对数据的查询、对搜索结果进行处理操作&#xff0c;下篇是介绍怎么在Java代码中调用和操作es。 基本概念 1、es是什么&#xff1f;有什么作用&#xff1f; es全名是elasticsea…

关于0成本部署个人博客

分享一个文章关于零成本搭建个人博客 参考&#xff1a;‘关于部署博客hexoshokagithub的流程以及问题’ - 关于博客部署 | XiaoYang Guo Welcome to Guo Xiaoyangs personal blog 欢迎来到郭晓阳的个人博客 (1330303.github.io) 这个博主讲的流程很全&#xff0c;而且回答也…

智慧管廊巡检运维解决方案

一、智慧管廊巡检行业目前存在的挑战和难题 智慧管廊巡检行业面临着运行环境的客观影响&#xff0c;如地面施工、液体渗漏、通风不佳、内部空间受限等问题。而管廊巡检机器人系统的出现却具有重大意义。它能够有力地保障管廊安全且可靠地运行&#xff0c;在面对火情、灾情等紧…

springboot基础篇(快速入门+要点总结)

目录 一、SpringBoot简介 二、创建SpringBoot&#xff08;通过Idea脚手架搭建项目&#xff09; 三、properties配置文件 properties 配置文件说明 ①. properties 基本语法 ②. 读取配置⽂件 ③. properties 缺点 2. yml 配置⽂件说明 ①. yml 基本语法 ②. yml 使用进…

上海AI lab发布MathBench,GPT-4o的数学能力有多强?

大模型数学能力哪家强&#xff1f; 最近&#xff0c;上海AI lab构建了一个全面的多语言数学基准——MathBench。与现有的基准不同的是&#xff0c;MathBench涵盖从小学、初中、高中、大学不同难度&#xff0c;从基础算术题到高阶微积分、统计学、概率论等丰富类别的数学题目&a…

【Linux】升级make(版本4.4.1)、升级gdb(版本14.1)、升级autoconf(版本2.71)

centos7升级make&#xff08;版本4.4.1&#xff09;&#xff1a; make&#xff1a;编译和构建工具。Linux中很多软件包需要make编译构建。官网&#xff1a;Make - GNU Project - Free Software Foundation 本次升级前的make版本是3.82&#xff0c;准备安装的版本是4.4.1。make…

【Delphi 开箱即用 4】动态切换主题皮肤(明亮 or 暗黑)

Delphi的原始窗口界面看起来并不够吸引人。尝试下载并安装第三方皮肤可能会导致应用程序尺寸急剧增加&#xff0c;并且可能会出现不稳定的情况。事实上&#xff0c;Delphi自带了皮肤功能&#xff0c;完全可以满足我们对窗口界面的美化需求&#xff0c;并且还支持动态切换皮肤。…

Python I/O操作笔记

打开文件&#xff1a; 使用 open() 函数&#xff0c;其中文件路径可以是相对路径或绝对路径。 模式除了常见的 r&#xff08;只读&#xff09;、w&#xff08;写入&#xff0c;会覆盖原有内容&#xff09;、a&#xff08;追加&#xff09;外&#xff0c;还有一些其他组合模式&…

基于springboot实现旅游管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游管理系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助使用者在…

来自Java的“菱形继承“,你听说过吗?

一、菱形继承的概念 菱形继承又叫做钻石继承&#xff0c;指的是不同的类同时继承自相同的父类&#xff0c;存在一个子类同时继承这些不同的类&#xff0c;即我们常说的“多继承”问题。 例如&#xff1a;B类和C类分别继承A类&#xff0c;而D类同时继承B类和C类。 如此图所示 二…

Oladance、韶音、南卡开放式耳机选哪个?2024年主流产品硬核测评!

近期&#xff0c;不少朋友向我咨询关于挑选开放式耳机的建议&#xff0c;希望找到既适合自己又具有高品质的选项。鉴于市场上开放式耳机品牌繁多&#xff0c;每款产品在音质、佩戴感受及整体性能上的表现各有千秋&#xff0c;正确选择一款耳机成为了音乐爱好者们关注的焦点。错…