网站首页 > 技术文章 正文
C++虽然是基于C语言开发的,但是经过版本的不断更迭,有些语法,操作和C语言还是有区别的。所以这也是很多人在学完C语言后,看到C++,总感觉两者没有关联,甚至觉得是两种不同的语言。读者在看本文前,应当具备C语言的基础知识。
为了能更快入门C语言,本文挑出了一些重要概念加一说明。读者可能会问:为什么这些概念如此重要?举个例子:要想理解,而不是以一种模板的方式看待C++输出Hello World的这样一段简单程序,就需要很多概念
#include <instream>
using namespace std;
int main()
{
cout<<"Hello World!"<<endl;
return 0;
}
1234567
一:建立C++工程文件
想必大部分读者进行C/C++学习时,使用的编译器是VS studio,那么大家可能也知道在VS里是没有关于C语言文件的项目的,都是选择C++项目,然后将后缀名改为.c文件
但是即便你选择了C++,去编写C语言仍然是可以通过的。
这表明,C++是兼容C语言的。
所以,之后我们学习C++话,就不用修改了,后缀名直接是.cpp
二:C++关键字
为什么这里要提及关键字呢。因为任何语言的关键字都是很特殊的,它是独一无二的。C语言共计32个关键字,C++共计63个关键字。
三:命名空间
情景导入:
一项工程,需要你和小王一起完成,你们两个在各自编写模块时都编写了一个相同名字的接口(函数),等到代码合并时,就出现了错误,原因可想而知,C/C++中,变量,函数以及类会作用域全局域中,相同的名字导致了命名冲突或名字污染
C语言不能有效的解决这样的问题。比如,我们都知道scanf函数是C语言的标准输入输出函数,但是下面的这样一个操作中,肯定是有歧义的,但是语法上似乎没有大的错误题型
scanf是函数名,却可以当作变量名。不过最后肯定是无法输出的,因为产生了歧义。在编译中首先展开了stdio.h头文件,scanf函数就在其中(函数名就是函数的首地址),所以执行到这一步,编译器不知道这里应该是要输出这个函数的地址还是要输出你定义的那个变量。
当然这些问题,可以用C++中的命名空间去解决
(1)命名空间的作用
C/C++中,变量,类的名称将存在于全局作用域中,重复的名字或其他问题将导致一些不可预见的错误。命名空间可以有效的解决这个问题,使用命名空间目的在于将标识符的名称本地化,以免冲突。
简单点来说,把名字关进“小黑屋”,你的和我的即便名字是一样的,但是本质是不一样的,使用时按照一定方式打开“小黑屋”
(2)命名空间的定义
A:命名空间的定义
定义命名空间时,要使用namespace关键字,其后紧接该命名空间的名字,然后写上“{}”,括号内即是该命名空间的成员。有点像结构体。
namespace N1//将改命名空间定义为“N1”
{
int a;//可以存放变量
void swap(int* a,int*b)//可以存放函数
{
int temp=*a;
*a=*b;
*b=temp;
}
}
12345678910
当然命名空间也是可以嵌套的
namespace N2
{
int a;
namespace N3
{
void swap(int* a,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
}
}
}
12345678910111213
同一个工程文件允许存在多个相同名称的命名空间,编译器最后会将其合并到同一个命名空间中。
B:注意事项
定义好命名空间,就相当于定义了一个新的作用域(“小黑屋”),命名空间中的所有内容都局限于该命名空间,除非使用时进行释放(打开“小黑屋”)。
如下,对于上面的那个例子中,如果定义命名空间,将不会出现错误:
(3)命名空间的使用
命名空间定义好之后,就把它关进“小黑屋”了,那么在使用时该如何使用呢。具体来说,有以下三种方法,各有其优缺点
1. 命名空间名称和作用域限制符
2. 使用using将成员导入
3.暴力导入
所以在最开始提及的输出Hello World!的程序中,using namespace std的作用就是将C++库进行导入。
总的来说,日常练习时,为了方便可以使用第三种暴力导入,但是在实际开发中,应当使用第一种和第二种,如果某个变量使用的较多的话,就使用第二种预先将这个变量名导入。
四:C++的输入和输出
输出Hello World是学习每个语言时的必备操作。最前面的那个C++输出似乎和C语言不太像,你当然可以使用printf输出,因为C++兼容C语言。但是在C++中,还是建议使用C++规定的输入和输出方式,它比C语言要更加方便,智能。
(1)cout
1.cout表示输出流,也就是控制台,所以你的Hello World可以写作
2.很多时候,会在最后加上endl,它表示换行符,表示换行符流向控制台
3.C++输出时非常方便,不像C语言一样,它不需要格式控制符
4.C++支持连续输出
(2)cin
1.cin表示输入流,也就是键盘。输入时无需指定格式,自动识别
2.当然也可以连续输入
- 注意:虽然C++的输入和输出有如上优点,但是C++在面对特定输出时,还是显得有点麻烦,比如控制小数位数,如果用C语言输出,在格式控制符的帮助下,就会显得很简单。所以不要拘泥于一定要使用哪一种方式,怎么方便怎么来。
猜你喜欢
- 2024-10-11 c++ 编译阶段(c++编译原理)
- 2024-10-11 C++代码解析3(c++代码大全及其含义)
- 2024-10-11 C++ 将容器元素连接成字符串(c++中的容器)
- 2024-10-11 Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符
- 2024-10-11 深入解析C++字符串处理:高效去除头尾空格的多种方法与实践
- 2024-10-11 C到C++转换学习笔记(c和c++转换)
- 2024-10-11 初识C++输入输出(c++基本的输入输出)
- 2024-10-11 如何从C语言快速过渡到C++?大神回答道:只需要一个下午就可以
- 2024-10-11 EasyC++01,C++程序概述(c++ ecs)
- 2024-10-11 C++第2课:输出与换行#少儿编程#盐城少儿编程#编程机器人
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)