C++的初步介绍,以及C++与C的区别
C++和C的区别
- C++又称C plus plus,且C++语言是对C语言的扩充,几乎支持所有的C语言语法;
- C语言:面向过程的语言(注重问题的解决方法和算法)
- C++:面向对象的语言 (求解的方法)
- 面向对象的三大特征:封装、继承、多态
- 抽象---->可以作为面向对象语言的第四个特征
C++对C的扩充
- 命名空间(解决命名冲突/命名污染问题)
- 函数重载(用于解决同一功能函数,可以定义相同名字,运算符重载)
- 引用(与C语言中的指针有关)
- 面向对象的特征
- 泛式编程
- 模板编程(模板类和模板函数)
- STL标准模板库
C++对C的兼容
- C++几乎支持所有C语法
- g++是C++使用的编译器,比gcc更加严格
- <stdio.h>头文件,在C++中仍然可以使用,C中所有头文件在C++中都可使用,将头文件中.h去掉,前面加c;
- C++文件的后缀是.cpp,C语言是.c后缀
C++程序
cout标准输入流对象
介绍
由ostream类提供的C++中的标准输出流的类对象,但是只有头文件不能直接使用cout,还需添加std,cout还包含在std命名空间中
运算
<<在C语言中为左移运算符,在C++中,ostream类对左移运算符进行了重载,重载后<<被称为运算符/输出运算符
cout的使用
- 不需要任何格式符,直接使用cout和<<
- cout << 输出的内容 <<endl; (endl就是换行)
使用cout指定格式的输出
- 通过函数,需要头文件
- 通过关键字
cin标准输入流对象
- 相当于C中scanf
- cin是由istream提供类对象,和cout一样,都存在于std标准命名空间中
命名空间
用于解决命名冲突和命名污染问题
- using 使用命名空间中的标识符
- std标准命名空
使用命名空间
全局引入命名空间
- 引入命名空间的位置,不包在任何花括号内
- 直接使用using引入整个命名空间中的标识符
- using namespace 命名空间名;
- 在该语句下的所有语句,都可以直接使用命名空间中的标识符
引入命名空间中的部分标识符
- using 命名空间名+标识符名;在该语句下的所有语句,可以使用命名空间中的部分标识符
- 在哪个位置使用,就在哪个位置使用域限定符
命名空间冲突问题
局部变量和命名空间冲突
引入了命名空间后,在使用时会默认使用局部变量,如果想要使用命名空间中的变量,使用命名空间名+域限定符;
两个命名空间中命名冲突问题
- 只引入某个命名空间,只能使用引入的命名空间中的标识符
- 直接在使用变量时,说明使用哪个命名空间中的标识符(命名空间名+域限定符)
全局变量和命名空间冲突问题
- 如果冲突,可以选择不引入命名空间,只能使用全局的变量
- 既要引入命名空间,又要使用全局变量,给全局变量前加域限定符(全局变量默认和匿名空间存放一起),当要访问命名空间中的变量时,使用命名空间名+域限定符
using的其他用法
- 引入命名空间
- using还可以用于类型重定义,类似于typedef
字符串/C++中的string类
C语言中不支持string类型
C++中封装了string类型,可以直接使用string变量
C++中字符串的定义
可以直接通过string实现
string str1 = "hello";
string str2 = str1;
C++风格和C语言风格字符串的转化
C向C++转化,无需任何操作
C++风格向C语言风格转化,需要c_str()或data()成员函数
string常用的函数
at()
访问指定下标的元素,使用at访问可以检查越界问题
length()/size()
返回字符串的长度
clear
清空字符串
empty
字符串的判空,空则返回1,否则返回0
字符串的输入
- cin函数不能获取带空格的字符串
- getline(cin,变量名) 可以获取带空格的字符串
C++中的bool
- C中不支持bool类型,C++中支持bool类型
- C++中的bool类型的默认值是0/false,默认的输出结果是数字的形式,仍然可以使用字母赋值
- true和false就是bool类型的值,是C++中的关键字
- 如果想要使用字母表示bool类型,加boolalpha关键字
- 如果想要恢复数字表示,noboolalpha
- bool类型的大小是1Byte,虽然bool类型只需要1bit,但是分配空间是以字节为单位进行分配
练习
定义一个命名空间Myspace,包含以下函数:将一个字符串中的所有单词进行反转,并输出反转后的结果。例如,输入字符串为"Hello World",输出结果为"olleH dlroW",并在主函数内测试该函数。
#include <iostream>
using namespace std;namespace Myspace {void turn(string *s); //函数声明
}
void Myspace::turn(string *s) //
{int len = (*s).length(); //s->length();char temp; //中间变量int i=0,j=0,k=0; //j用于保存开始位置,k用于保存单词结束的位置while(i<len) //控制循环到字符串的最后一个位置{//找单词的结束位置if(i==len-1||s->at(i)!=' '&&s->at(i+1)==' '){k=i; //k应该为o的下标}//找单词的起始位置if(i<len-1&&s->at(i+1)!=' '&&s->at(i)==' ') //i+1的位置不是空格,但是i的位置是空格{j = i+1; //j会停留在w的下标}while(j<k) //起始位置在结束位置前{temp = s->at(j);s->at(j) = s->at(k);s->at(k) = temp;j++;k--;}i++; //循环变量自增}
}
int main()
{string str = "Hello World";Myspace::turn(&str);cout << str << endl;return 0;
}
相关文章:
C++的初步介绍,以及C++与C的区别
C和C的区别 C又称C plus plus,且C语言是对C语言的扩充,几乎支持所有的C语言语法;C语言:面向过程的语言(注重问题的解决方法和算法)C:面向对象的语言 (求解的方法)面向对…...
JDK 核心jar之 rt.jar
一、JDK目录展示 二、rt.jar 简介 2.1.JAR释义 在软件领域,JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等&…...
el-form表单验证:只在点击保存时校验(包含select、checkbox、radio)
1、input类型 input类型 在el-input里加入:validate-event"false" <el-form-item label"活动名称" prop"name"><el-input v-model"ruleForm.name" :validate-event"false"></el-input> </el-form-i…...
Golang基本语法(上)
1. 变量与常量 Golang 中的标识符与关键字 标识符 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。 关键字 关键字和保留字都不建议用作变量名: Go语言中有25个关键字。 此…...
jenkins使用
安装插件 maven publish over ssh publish over ssh 会将打包后的jar包,通过ssh推送到指定的服务器上,,在jenkins中设置,推送后脚本,实现自动部署jar包,, 装了这个插件之后,可以在项…...
多线程基础篇(包教包会)
文章目录 一、第一个多线程程序1.Jconsole观察线程2.线程休眠-sleep 二、创建线程三、Thread类及常见方法1. Thread 的常见构造方法2. Thread 的几个常见属性3. 启动线程 - start4. 中断线程5. 等待一个线程 四、线程状态五、线程安全问题(synchronized)(重点&#…...
Android/Java中,各种数据类型之间的互相转换,给出各种实例,附上中文注释
目录 1.字符串(String)转整数(int): 2.整数(int)转字符串(String): 3.字符串(String)转浮点数(float)&…...
机器学习知识点总结:什么是EM(最大期望值算法)
什么是EM(最大期望值算法) 在现实生活中,苹果百分百是苹果,梨百分白是梨。 生活中还有很多事物是概率分布,比如有多少人结了婚,又有多少人有工作, 如果我们想要调查人群中吸大麻者的比例呢?敏感问题很难得…...
漏洞挖掘和安全审计的技巧与策略
文章目录 漏洞挖掘:发现隐藏的弱点1. 源代码审计:2. 黑盒测试:3. 静态分析工具: 安全审计:系统的全面评估1. 渗透测试:2. 代码审计:3. 安全策略审查: 代码示例:SQL注入漏…...
[SpringBoot3]Web服务
五、Web服务 基于浏览器的B/S结构应用十分流行。SpringBoot非常适合Web应用开发,可以使用嵌入式Tomcat、Jetty、Undertow或Netty创建一个自包含的HTTP服务器。一个SpringBoot的Web应用能够自己独立运行,不依赖需要安装的Tomcat、Jetty等。SpringBoot可以…...
构建系统自动化-autoreconf
autoreconf简介 autoreconf是一个GNU Autotools工具集中的一个命令,用于自动重新生成构建系统的配置脚本和相关文件。 Autotools是一组用于自动化构建系统的工具,包括Autoconf、Automake和Libtool。它们通常用于跨平台的软件项目,以便在不同…...
Mysql之InnoDB和MyISAM的区别
InnoDB和MyISAM是MySQL数据库中两种常见的存储引擎,它们在功能和性能方面有一些明显的区别。下面是它们之间的详细解释和说明: 底层数据 存数据的时候,MyISAM是数据和索引分开存储,分为MYD和MYI 而InnoDB是数据即索引࿰…...
Unity 之 Transform.Translate 实现局部坐标系中进行平移操作的方法
文章目录 Translate 默认使用局部坐标也可以转换成世界坐标 Translate 默认使用局部坐标 在Unity中,Transform.Translate是用于在游戏对象的局部坐标系中进行平移操作的方法。这意味着它将游戏对象沿着其自身的轴进行移动,而不是世界坐标轴。这在实现物…...
PostgreSQL Error: sorry, too many clients already
Error PG的默认最大连接数是100. 如果超过100就会报错sorry, too many clients already Find show max_connections; SELECT COUNT(*) from pg_stat_activity; SELECT * FROM pg_stat_activity;Solution 提高最大连接数 ALTER SYSTEM SET max_connections 然后重启pg查看…...
Vue2(路由)
目录 一,路由原理(hash)二,路由安装和使用(vue2)三,路由跳转四,路由的传参和取值五,嵌套路由六,路由守卫最后 一,路由原理(hash&#…...
中介者模式-协调多个对象之间的交互
在深圳租房市场,有着许多的“二房东”,房主委托他们将房子租出去,而租客想要租房的话,也是和“二房东”沟通,租房期间有任何问题,找二房东解决。对于房主来说,委托给“二房东”可太省事了&#…...
Python框架【自定义过滤器、自定义数据替换过滤器 、自定义时间过滤器、选择结构、选择练习、循环结构、循环练习、导入宏方式 】(三)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...
红黑树遍历与Redis存储
引言 在计算机科学领域,红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它能在O(log n)的时间复杂度内完成插入、删除和查找操作。由于其高效性和可预测性的性能,红黑树在许多领域都得到广泛应用。本文将重点介绍红…...
前端处理图片文件的方法
在项目开发过程中,有一个需求,需要前端对上传的图片进行处理,以字符串的形式传给后端,实现效果如下: 1.上传图片的组件 在该项目中,使用了element plus组件库 <el-uploadv-model:file-list"fileL…...
「Java」《深入解析Java多线程编程利器:CompletableFuture》
《深入解析Java多线程编程利器:CompletableFuture》 一、 引言1. 对多线程编程的需求和挑战的介绍2. 介绍CompletableFuture的作用和优势 二. CompletableFuture简介1. CompletableFuture是Java中提供的一个强大的多线程编程工具2. 与传统的Thread和Runnable相比的优…...
bb_imu:嵌入式多IMU统一驱动库与自动识别方案
1. 项目概述bb_imu是由 BitBank Software, Inc. 开发并维护的嵌入式惯性测量单元(IMU)统一驱动库,专为资源受限的微控制器平台(如基于 ARM Cortex-M 系列的 STM32、ESP32、nRF52,以及 Arduino AVR 架构)设计…...
不止是字体!用Qt Creator样式表自定义你的IDE主题(附工具栏优化)
不止是字体!用Qt Creator样式表打造个性化开发环境 作为一名长期使用Qt Creator的开发者,你是否曾对默认界面的单调感到审美疲劳?或是被工具栏上过小的字体折磨得眼睛酸痛?其实,Qt Creator的界面定制能力远超大多数人的…...
Qwen3-32B内容创作应用:自动生成文案、报告、邮件
Qwen3-32B内容创作应用:自动生成文案、报告、邮件 1. 为什么选择Qwen3-32B进行内容创作 在当今内容为王的时代,企业每天都需要产出大量高质量的文字内容。从营销文案到产品说明,从客户邮件到内部报告,文字创作已经成为企业运营中…...
【CP AUTOSAR】Icu驱动模块:从原理到实战的配置与优化指南
1. Icu驱动模块在AUTOSAR架构中的核心作用 第一次接触AUTOSAR的Icu模块时,我完全被它复杂的配置项搞懵了。直到在S32K3项目上实际调试电机转速测量功能,才真正理解这个模块的价值。简单来说,Icu就像汽车电子系统的"脉搏检测仪"&…...
解锁你的音乐收藏:NCM格式转换全攻略
解锁你的音乐收藏:NCM格式转换全攻略 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 你是否曾遇到过这样的烦恼?从音乐平台下载的歌曲只能在特定应用中播放,换了设备…...
深入解析acts-as-taggable-on:Rails标签系统的终极实现指南
深入解析acts-as-taggable-on:Rails标签系统的终极实现指南 【免费下载链接】acts-as-taggable-on A tagging plugin for Rails applications that allows for custom tagging along dynamic contexts. 项目地址: https://gitcode.com/gh_mirrors/ac/acts-as-tagg…...
嵌入式开发中PlantUML图表的工程化应用
嵌入式开发中PlantUML图表的工程化应用指南1. 嵌入式文档工具概述在嵌入式系统开发过程中,系统架构图和设计文档是工程师沟通需求、梳理逻辑的核心工具。传统拖拽式绘图工具存在效率低下、维护困难等问题,而基于代码生成图表的PlantUML技术为嵌入式开发文…...
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.…...
新手必看:5分钟学会用Visio绘制PAD图和N-S图(附实例解析)
零基础掌握Visio绘制PAD图与N-S图的实战指南 在软件设计领域,可视化工具的重要性不言而喻。对于刚入门的开发者来说,掌握如何将抽象的逻辑思维转化为直观的图表是一项必备技能。Visio作为微软旗下的专业绘图工具,以其友好的界面和强大的功能&…...
TradingAgents-CN完整指南:5分钟搭建你的AI股票分析系统
TradingAgents-CN完整指南:5分钟搭建你的AI股票分析系统 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 还在为复杂的金融量化系统搭…...
