当前位置: 首页 > news >正文

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.lryc.cn/news/136605.html

相关文章:

  • JDK 核心jar之 rt.jar
  • el-form表单验证:只在点击保存时校验(包含select、checkbox、radio)
  • Golang基本语法(上)
  • jenkins使用
  • 多线程基础篇(包教包会)
  • Android/Java中,各种数据类型之间的互相转换,给出各种实例,附上中文注释
  • 机器学习知识点总结:什么是EM(最大期望值算法)
  • 漏洞挖掘和安全审计的技巧与策略
  • [SpringBoot3]Web服务
  • 构建系统自动化-autoreconf
  • Mysql之InnoDB和MyISAM的区别
  • Unity 之 Transform.Translate 实现局部坐标系中进行平移操作的方法
  • PostgreSQL Error: sorry, too many clients already
  • Vue2(路由)
  • 中介者模式-协调多个对象之间的交互
  • Python框架【自定义过滤器、自定义数据替换过滤器 、自定义时间过滤器、选择结构、选择练习、循环结构、循环练习、导入宏方式 】(三)
  • 红黑树遍历与Redis存储
  • 前端处理图片文件的方法
  • 「Java」《深入解析Java多线程编程利器:CompletableFuture》
  • Docker容器与虚拟化技术:容器运行时说明与比较
  • vue导出文件流获取附件名称并下载(在response.headers里解析filename导出)
  • ​山东省图书馆典藏《乡村振兴战略下传统村落文化旅游设计》鲁图中大许少辉博士八一新书
  • 2023-08-19力扣每日一题-水题/位运算解法
  • Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)
  • LRU淘汰策略执行过程
  • Kotlin 高阶函数详解
  • DL——week2
  • 如何撰写骨灰级博士论文?这是史上最全博士论文指导!
  • 08.SpringBoot请求相应
  • C#详解-Contains、StartsWith、EndsWith、Indexof、lastdexof