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相比的优…...
基于MCP协议构建监控数据连接器:统一多源数据赋能AI运维
1. 项目概述:一个面向开发者的监控数据连接器如果你是一名开发者,尤其是后端或运维工程师,那么“监控”这个词对你来说一定不陌生。从服务器CPU、内存使用率,到应用接口的响应时间、错误率,再到业务层面的关键指标&…...
不止于水:用MS动力学模拟和RDF分析,探究任意离子/分子在溶液中的溶剂化结构
从水到多元溶液:MS动力学模拟与RDF分析的高级应用指南 当我们需要理解溶液中离子或分子的行为时,径向分布函数(RDF)分析提供了一个强有力的工具。传统的纯水体系研究固然重要,但现实中的溶液系统往往更为复杂——电解液中的锂离子、蛋白质溶液…...
Harbor:统一管理MCP服务器,告别AI助手配置混乱
1. 项目概述:Harbor,一个管理MCP服务器的统一中心如果你和我一样,在日常开发中深度依赖Claude、Cursor这类AI编程助手,那你一定对MCP(Model Context Protocol)服务器不陌生。简单来说,MCP服务器…...
应用安全从被动到主动:企业如何提升弹性与可靠性,降低安全债务?
ZDNET核心观点应用安全需董事会层面问责,企业文化影响“设计即安全”工作,运营模式将预防转化为行动。企业聚焦软件策略改变网络安全结果,挑战是在开发周期早期融入安全措施,构建捕捉漏洞和隐患的工具技术。本文将从被动到主动的转…...
自建团队协作平台TeamClaw:从架构设计到部署运维全指南
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫teamclaw,仓库地址是teamclawai/teamclaw。乍一看这个名字,可能有点摸不着头脑,但深入了解一下,你会发现它瞄准的是一个非常具体且高频的痛点:团…...
5分钟快速上手:XUnity.AutoTranslator游戏翻译插件完整教程
5分钟快速上手:XUnity.AutoTranslator游戏翻译插件完整教程 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏的语言障碍而烦恼吗?XUnity.AutoTranslator是一款强大的…...
Redux Thunk终极性能优化指南:从2秒到200毫秒的惊人提升
Redux Thunk终极性能优化指南:从2秒到200毫秒的惊人提升 【免费下载链接】redux-thunk Thunk middleware for Redux 项目地址: https://gitcode.com/gh_mirrors/re/redux-thunk Redux Thunk是Redux生态中最受欢迎和广泛使用的中间件,它为处理异步…...
VSCode写Verilog效率翻倍:除了语法检查,再教你用Python插件自动生成模块例化
VSCode写Verilog效率翻倍:Python插件自动化实战指南 在FPGA开发中,Verilog代码的重复性劳动往往消耗工程师大量时间。我曾在一个图像处理项目中被模块例化折磨得焦头烂额——手动编写30多个相同结构的FIFO例化代码,不仅容易出错,后…...
语言启蒙到底要不要背单词
语言启蒙阶段到底要不要背单词?我更愿意把这个问题换一种问法:这些词是不是能和声音、图像、语境连起来,并且隔几天还能回来一次。 如果只是拿一张词表硬记,入门用户很容易觉得枯燥。可如果完全不接触词汇,后面的听读…...
黑客马拉松(Hackathon)文化:是创新工场,还是疲劳表演?
在软件工程的世界里,我们测试人常常站在产品交付的最后一道防线上,习惯了在严谨的流程、详尽的用例和稳定的环境中寻找缺陷。而黑客马拉松,这个充满激情、混乱与极限编程的代名词,对我们来说,既像是一个遥不可及的极客…...
