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;
}

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

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

相关文章

linux 上安装es

首先 到官网 https://www.elastic.co/cn/downloads/elasticsearch 下载对应的安装包&#xff0c;我这里下载的是 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-linux-x86_64.tar.gz 然后讲该压缩包上传到 linux 的/usr/local 目录下执行 tar -z…

Just KNIME it[S2C21] 图像识别

朋友们&#xff0c;Just KNIME it 还有在跟进吗? 本季已经到 21 期啦。 本期探讨的主题是图像识别问题&#xff0c;快随指北君一起看看吧。 挑战 21&#xff1a;帮助球童&#xff08;第 1 部分&#xff09; 级别&#xff1a;中 描述&#xff1a;球童汤姆是一位最受欢迎的高尔夫…

Ansible学习笔记(一)

1.什么是Ansible 官方网站&#xff1a;https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html Ansible是一个配置管理和配置工具&#xff0c;类似于Chef&#xff0c;Puppet或Salt。这是一款很简单也很容易入门的部署工具&#xff0c;它使用SS…

Linux解决RocketMQ中NameServer启动问题

启动步骤可以查看官网&#xff0c;https://github.com/apache/rocketmq 一下说明遇到的问题。 1&#xff1a;ROCKETMQ_HOME问题 根据官网提示进入mq/bin目录下&#xff0c;可以使用./mqnamesrv进行NameServer启动&#xff0c;但是会遇到第一个问题&#xff0c;首次下载Rocket…

AndroidStudio 编译报错Unable to make field private final

用 AndroidStudio 打开某个工程后&#xff0c;编译报错如下 Execution failed for task :app:processDebugMainManifest. > Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to …

【Docker-Compose】

Docker-Compose 一、简介1.1为什么使用Docker-compose1.2Docker-compose概述2.Docker-compose常用命令3.YAML文件格式编写注意事项4.Docker-compose配置常用的字段 二、搭建1.前提&#xff1a;安装在docker基础上2.nginx3.MySQL4.PHP 一、简介 1.1为什么使用Docker-compose D…

5081. 重复局面

Powered by:NEFU AB-IN Link 文章目录 5081. 重复局面题意思路代码 5081. 重复局面 题意 判断棋子局面是否重复 思路 直接将棋子局面放进哈希表中即可 代码 /* * Author: NEFU AB-IN * Date: 2023-08-23 17:28:10 * FilePath: \Acwing\5081\5081.cpp * LastEditTime: 2023-08…

【LeetCode】560.和为K的子数组

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&#xff1a;2提示…

机器学习---常见的距离公式(欧氏距离、曼哈顿距离、标准化欧式距离、余弦距离、杰卡德距离、马氏距离、切比雪夫距离、闵可夫斯基距离、K-L散度)

1. 欧氏距离 欧几里得度量&#xff08;euclidean metric&#xff09;&#xff08;也称欧氏距离&#xff09;是一个通常采用的距离定义&#xff0c;指在m维空 间中两个点之间的真实距离&#xff0c;或者向量的自然长度&#xff08;即该点到原点的距离&#xff09;。在二维和三维…

一文读懂数据云的「对象体系」

确切地说&#xff0c;有6个域、32个对象 啥是「对象」&#xff1f; 在计算机科学的定义中 对象&#xff08;Object&#xff09;是面向对象编程的基本单位 是一种将数据和操作封装在一起的实体 它具有「属性」和「行为」 可以与其他对象进行交互和通信 对象最突出的特征 莫…

【业务功能篇78】微服务-前端后端校验- 统一异常处理-JSR-303-validation注解

5. 前端校验 我们在前端提交的表单数据&#xff0c;我们也是需要对提交的数据做相关的校验的 Form 组件提供了表单验证的功能&#xff0c;只需要通过 rules 属性传入约定的验证规则&#xff0c;并将 Form-Item 的 prop 属性设置为需校验的字段名即可 校验的页面效果 前端数据…

大语言模型初学者指南 (2023)

大语言模型 (LLM) 是深度学习的一个子集&#xff0c;它正在彻底改变自然语言处理领域。它们是功能强大的通用语言模型&#xff0c;可以针对大量数据进行预训练&#xff0c;然后针对特定任务进行微调。这使得LLM能够拥有大量的一般数据。如果一个人想将LLM用于特定目的&#xff…

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…

ubuntu查看网速

使用speedomster测试网速 sudo apt-get install speedometer 查询需要测速的网卡 speedometer -r ens33 -t ens33 -r: 指定网卡的接收速度 -t: 指定网卡的发送速度 使用nload测试 sudo apt-get install nload 测速 nload -t 200 -i 1024 -o 128 -U M 参数含义&#xff0…

韩顺平java集合

遍历集合方式: public static void main(String[] args) {List<Object> arrayList new ArrayList<>();arrayList.add(1);arrayList.add(3);arrayList.add(111);Iterator<Object> iterator arrayList.iterator();while (iterator.hasNext()){System.out.pri…

Ubuntu安装Apache+Php

环境&#xff1a;ubuntu 22.04 虚拟机 首先更新一下 sudo apt-get update sudo apt-get upgrade安装Apache2&#xff1a; sudo apt-get install apache2 输入y&#xff0c;继续。等着他恐龙抗浪抗浪的下载安装就好了 打开浏览器访问http://localhost/ 安装php&#xff1a; …

LeetCode3.无重复字符的最长子串

虽然是一道中等题&#xff0c;但我5分钟就写完了&#xff0c;而且是看完题就知道怎么写&#xff0c;这一看就知道双指针&#xff0c;一个左一个右&#xff0c;右指针往后移如果没有重复的长度1&#xff1b;如果有重复的&#xff0c;左指针往右移&#xff0c;那如何判断重复呢&a…

unity-ShaderGraph全节点

1.Artistic美术 Adjustment调整 Channel Mixer 混合颜色通道 Contrast 设置对比度 Hue 设置色调 range需要选normalized Invert Colors 反转颜色 Replace Color 设置两个颜色通道互换&#xff0c;可调参数 Saturation 设置饱和度 White Balance 白平衡&#xff08;调冷暖色调&a…

ps吸管工具用不了怎么办?

我们的办公神器ps软件&#xff0c;大家一定是耳熟能详的吧。Adobe photoshop是电影、视频和多媒体领域的专业人士&#xff0c;使用3D和动画的图形和Web设计人员&#xff0c;以及工程和科学领域的专业人士的理想选择。Photoshop支持宽屏显示器的新式版面、集20多个窗口于一身的d…

Thinkphp6 如何 生成二维码

最近需要用到使用到二维码&#xff0c;需要将对应的网址输出生成二维码&#xff0c;Thinkphp6实现还是比较简单的&#xff1a; 第一步&#xff1a;安装 think-qrcode composer require dh2y/think-qrcode第二步&#xff1a;在对应的控制器使用 use dh2y\qrcode\QRcode;第三步&a…