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

news2024/9/19 18:56:54

目录

一.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;     //定义了一个字符串变量s1
    string 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";     //定义了一个字符串变量s1
    string 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;     //true
        cout << noboolalpha << t << endl;   //1 
        cout << sizeof(t) << endl;   //1Byte
        return 0;
    }

六思维导图/练习

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

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

相关文章

出生率下降 幼儿园如何面对困境创新转型

从2023年开始&#xff0c;全国幼儿园生存发展问题成为教育界焦点&#xff0c;民办幼儿园更为焦虑满满。当今年轻人对待婚姻和生育的观念&#xff0c;的确让上一辈人始料未及。那么&#xff0c;是否幼儿园再也不可能回到巅峰时期了&#xff1f;是否很多幼儿教育者将无用武之地呢…

只要尝试一次API正向工程,你就会无可救药的爱上她!

何为正向&#xff0c;何为反向&#xff1f; 举个例子&#xff1a;在数据库的设计里面这个概念可能被大量涉猎&#xff1b;古早先是 DBA设计好表以及表之间的关系(一对多&#xff0c;多对一&#xff0c;多对多...)&#xff1b;然后应用是通过ORM 映射数据库表到业务内领域对象&a…

[猫头虎分享21天微信小程序基础入门教程] 第17天:小程序的用户授权与安全

[猫头虎分享21天微信小程序基础入门教程] 第17天&#xff1a;小程序的用户授权与安全 第17天&#xff1a;小程序的用户授权与安全 &#x1f512; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&#xff0c;重点了解如…

OrangePi AIpro 性能测试以及使用体验

OrangePi AIpro 性能测试以及使用体验 1. 介绍 OrangePi AIpro(8T)采用昇腾AI技术路线。 具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&#xff0c;支持双4…

超详细避坑指南!OrangpiAIPro转换部署模型全流程!

目录 OrangepiPro初体验 前述&#xff1a; 一、硬件准备 二、安装CANN工具链&#xff08;虚拟机&#xff09; 三、配置模型转换环境&#xff08;虚拟机&#xff09; 1.安装miniconda 。 2.创建环境。 3.安装依赖包 四、转换模型 1. 查看设备号&#xff08;开发板&…

Linux服务器安装anaconda、配置pytorch环境

Linux服务器安装anaconda并配置pytorch环境 Linux服务器安装anaconda下载anaconda安装anaconda验证是否安装成功注意默认python版本 配置pytorch环境新建虚拟环境安装pytorch Linux服务器安装anaconda 下载anaconda 首先进入anaconda网站&#xff0c;根据自己的需要选择一个版…

LLM中的RoPE位置编码代码解析与RoPE的性质分析(一)

本博客需要对位置编码有一定了解&#xff0c;但不熟悉代码实现的老哥看。 正弦位置编码&#xff08;sinusoidal&#xff09; 在介绍RoPE之前&#xff0c;先回顾一下正弦位置编码。 数学表达 P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) PE(pos, 2i) sin…

5.27作业

定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream>using namespace std; namespace my_space {string s1;string reverse1(string s1);} using namespace my_space; int m…

Web(数字媒体)期末作业

一.前言 1.本资源为类似于打飞机的网页游戏 2.链接如下&#xff1a;【免费】前端web或者数字媒体的期末作业&#xff08;类似于打飞机的2D网页小游戏&#xff09;资源-CSDN文库 二.介绍文档

HR人才测评,哪些岗位需要测评想象力?

什么是想象力&#xff1f; 想象力是指&#xff0c;人们通过在已有物质的基础上&#xff0c;通过大脑想象、加工、创造出新事物的能力&#xff0c;举一个非常简单的例子&#xff0c;在提到鸟这种生活的时候&#xff0c;大家会联想到各种各样不同鸟的品种。 哪些岗位需要测评…

喜讯 | 聚铭网络入选2024安在新榜网络安全产品“大众点评”百强榜及全景图

近日&#xff0c;安在新榜发布了备受期待的《2024中国网络安全产品用户调查报告》。在这份权威报告中&#xff0c;聚铭网络凭借先进的技术、优秀的产品和专业的配套服务&#xff0c;成功入选《2024安在新榜网络安全产品“大众点评”百强榜》。 报告通过对全国企业用户进行专项调…

海外仓erp系统是什么?和海外仓管理系统一样吗?

为了满足海外仓全球化发展的大趋势&#xff0c;同时提升海外仓运转的效率&#xff0c;一套好用&#xff0c;性价比高的海外仓管理系统还是非常重要的。 不过很多海外仓企业其实不太分得清erp系统和海外仓管理系统的差异&#xff0c;今天我们就来系统的聊一下&#xff0c;方便大…

React useState修改对象

在 React 中&#xff0c;useState 是一个 Hook&#xff0c;它可以让函数组件拥有状态。当想要改变一个对象类型的状态时&#xff0c;我们需要使用展开运算符&#xff08;...&#xff09;或者 Object.assign 来确保状态是正确地更新。 以下是一个使用 useState 来更新对象的例子…

windows下nvm的安装及使用

目录 一、下载二、安装三、使用 一、下载 下载链接&#xff1a;https://github.com/coreybutler/nvm-windows/releases 二、安装 双击 nvm-setup.exe&#xff0c;按提示一步步安装。 三、使用 # 查看已安装的版本信息 nvm list&#xff08;可简写为&#xff1a;nvm ls&am…

计算机视觉中-语义分割

语义分割 语义分割是计算机视觉中的一个关键技术&#xff0c;它涉及对图像中的每个像素进行类别划分&#xff0c;从而识别出图像中的不同物体或区域。具体来说&#xff0c;语义分割就是按照“语义”给图像上目标类别中的每一点打上一个标签&#xff0c;使得不同种类的东西在图像…

【RSGIS数据资源】中国多时期土地利用遥感监测数据集(CNLUCC)

文章目录 数据基本信息摘要数据说明数据引用方式 数据基本信息 数据时间&#xff1a; 多时期(1970年代末期以来11期) 空间位置&#xff1a; 中国 数据格式&#xff1a; 矢量与栅格 空间分辨率&#xff1a; 30m 主题分类&#xff1a; 中国土地利用遥感监测数据 DOI标识&#xf…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

UML-系统架构师(二)

1、UML&#xff08;Unified Modeling Language&#xff09;是面向对象设计的建设工具&#xff0c;独立于任何具体程序设计语言&#xff0c;以下&#xff08;&#xff09;不属于UML中的模型。 A用例图 B协作图 C活动图 DPAD图 解析&#xff1a; UML一共14种图 结构图&…

电商场景的视频动效

AtomoVideo:AIGC赋能下的电商视频动效生成本文分享阿里妈妈视频 AIGC(AtomoVideo等) 赋能视频广告创意的探索和实践。通过基于扩散模型的视频生成技术,结合可控生成技术,使静态电商图片能够栩栩如生地“动”起来,实现了在电商领域的视频 AIGC 应用落地。https://mp.weixi…

LDRA Testbed(TBrun)软件单元测试_操作指南

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…