| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++】C++基础语法 -> 正文阅读 |
|
[C++知识库]【C++】C++基础语法 |
前言 C++兼顾C语言的语法,在C++上,可以编写C的代码! C++基础语法呢,有非常多的细节,需要大家慢慢来摸索,仔细的回顾,反复的复习! 目录 一、C++关键字(C++98)在C语言的基础上多加了C语言没有的关键字,到后期边使用边学习,先大概看一眼!! 二、命名空间1.由来? ? ?当我们定义一个变量时,会不会偶尔和库里面的函数名字相同?? ? ? ?当我们协同完成一个项目时,你定义的变量会不会与其他人定义的变量名冲突??? ? ? ?当然会,所以就会出现命名空间这个词,在学习命名空间前呢,我们得先了解一个关键字 namespace.
2.定义?1.定义和初步了解
那么加了namespace和直接定义到外面当全局,有什么区别呢? 那就是为了防止命名冲突,加了namespace就相当于加了一堵围墙,别人不可以随意的访问里面的内容,只能通过 bit::这把钥匙来访问。 2.命名空间的嵌套命名空间可以嵌套多层
对于多层嵌套的命名空间用法就是这样的。 3.同一文件命名空间名相同时
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
4.std官方库定义的命名空间
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
C++中,我们使用的函数都在std命名空间里,所以在我们使用时,经常会这样: 在使用时,会反反复复的去写域作用限定符,所以为了避免重复,c++就新出现 using namespace std;什么意思呢?? 之前我们说,命名空间就像围墙,把里面的东西围起来,需要钥匙打开,才可以使用里面的内容, 于是? using namespace std;? 就相当于把隔离围墙放开了,这下所有人都可以使用了,就还会出现 命名冲突,但是我们也可以把频率较高使用的单独放开围墙,这样我们就不需要重复去写 cout是c++中的输出,相当于c的printf,所以将其单独放开的话,就是这样的:using std::cout; 你懂了吗?? ?当然,全部展开using namespace std是我们平时自己联系敲代码的时候可以这样!! 三、C++的输入和输出?
1.使用
cout
标准输出对象
(
控制台
)和
cin
标准输入对象
(
键盘
)时,必须
包含
< iostream >
头文件
以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
iostream >头文件中。
3.
<<
是流插入运算符,
>>
是流提取运算符。
4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
C++的输入输出可以自动识别变量类型。
直接举例:
?四、缺省参数1.定义
缺省参数是
声明或定义函数时为函数的
参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。
func 函数中的参数int a=10则为缺省参数,缺省参数的值是可以变的,没有指定参数时,会使用缺省参数,否则使用指定的实参。
2.分类缺省参数分为半缺省和全缺省,当然半缺省不是缺省一半的参数,半缺省必须传一个参数值,而全缺省不需要传值。 半缺省(部分缺省),缺省参数只能从右向左连续缺省: void Func(int a,int b,int c =10)? 可以?? void Func(int a,int b=10,int c)? ?不可以 void Func(int a,int b=10,int c=100)? 可以 传参时,从左往右给: void Func(int a,int b,int c =10)? Func(10,100); 3.缺省值在声明和定义中
缺省参数不能在函数声明和定义中同时出现
在 .h中,void Func(int a=10) ;
在.cpp中,void Func(int a=100) {;}
若出现声明和定义中都有,那就会出现分歧,当声明和定义中都有,
规定缺省值只能在声明中出现
在 .h中,void Func(int a=10) ;
在.cpp中,void Func() {;}? // 可以
?五、函数重载在C语言中,我们会出现这种情况:
对于同样的函数功能,当参数类型不同的时候,我们需要再去写一个函数,而且还不能同名,如果重名,编译器不会通过,但如果在C++中,就可以使用,这叫做 函数重载。 1.定义
函数重载:
是函数的一种特殊情况,
C++
允许在
同一作用域中
声明几个功能类似
的同名函数
,这
些同名函数的
形参列表
(
参数个数 或 类型 或 类型顺序
)
不同
,常用来处理实现功能类似数据类型
不同的问题。
总之一句话,函数名相同,参数不同。参数不同包括,参数个数,参数类型,参数顺序。
顺序不同要注意的是:
那怎么调用呢??函数重载可以支持自动识别类型 2.缺省函数与重载函数
函数名相同,参数不同就可以构成 函数重载,但在调用时,f()这样调用会报错,发生歧义。 ?那么,函数重载是怎么进行的呢?? 下面会简单的让大家理解这个过程。 在调用函数时,我们会找函数的地址,来调用它 那么如何找到它的地址呢?? 就是通过符号表来找到的,在linux编译C++中,它是这样进行的: 函数名都叫? f? 所以都是_z1f,第一个函数的参数是int,所以是_z1fi? (int),以此类推,第二个则是i c ,第三个是c i,所以这就很容易的找到了函数名,并找到它的地址,再调用。 那么,就会有这样一个问题,参数不同构成函数重载,那我要返回值不同构成函数重载可以吗?? 是因为函数名修饰规则没有带返回值的原因吗?? 就是在符号表中函数名这里,再添加不同的返回值所代表的符号不就可以了吗?? 当然不行!! 那是因为,我们在调用函数时,只可以指定它的参数,但无法指定他的返回值!! 是不是没有想到?? 六、auto自动识别类型1.定义auto可以自动识别类型,举例说明:
2.使用规则? 1.与引用结合
用
auto
声明指针类型时,用
auto
和
auto*
没有任何区别,但用
auto
声明引用类型时则必须
加
&
typeid(变量名),可以拿到变量类型的字符串。结果显示如下: 2.注意:?引用只是起别名,本质上,还是变量本身的类型。
? ? ? ? ? ?auto
不能作为函数的参数,会无法对参数进行类型推导
? ? ? ? ? ?auto
不能直接用来声明数组
3.?基于范围的for循环(C++11) 对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因
此
C++11
中引入了基于范围的
for
循环。
for
循环后的括号由冒号
“
:
”
分为两部分:第一部分是范
围内用于迭代的变量,第二部分则表示被迭代的范围
。
但对于下面这种情况,就是错误的:
七、指针空值nullptr(C++11)在C语言中,指针为空时为NULL; NULL实际是一个宏,在传统的C头文件(stddef.h)中,
NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何
种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦。
注意:
1.
在
C++11
中,
sizeof(nullptr)
与
sizeof((void*)0)
所占的字节数相同。
2.
为了提高代码的健壮性,在后续表示指针空值时建议最好使用
nullptr
。
八、内联函数在我们编译代码的时候,总会有一些短小的代码,但需要我们反复去调用,那么调用函数就会建立栈帧,但是宏可以解决这样的问题,预先定义好宏,在预处理时,都会被替换直接展开,不需要写函数。 但是宏有几个缺点,不能调试;没有类型安全检测;容易写错!! 所以才会有内联函数来替代宏,让我们更方便。
那么是不是我们以后可以随随便便加内联,都把需要的展开??
总结基础的语法知识细节很多,需要我们去仔细去学习,在后续学习中,这些必要的语法知识是非常重要的!!我们下期再见! |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 11:46:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |