C++入门小知识点(一)
C++是建立在C语言基础之上的一门面向对象的编程语言,所以要想学好C++必须先学好C语言,如果你觉得你不学C
语言可以学好C++,可以试试,毕竟我没有尝试过。。。
咱们先来整理一下入门的认识与基本关于C++的知识:
1)认识C++。
2)C++与C语言相比有什么特点。
3)为什么C++支持重载,而C语言不行。
4)了解在C++中什么是函数缺省。
5)对于C++的命名空间的解释与作用
6)关于C++中的引用
a)什么是引用
b)引用的特点
c)引用作为参数是怎么回事
d)引用作为返回值的理解
e)引用根本原理
f)引用与c语言中的指针有什么不同
1.认识C++
C++是一门不完全面向对象的编程语言,为什么这么说呢?因为C++最大程度上继承了C语言
而C语言是面向过程的编程语言。C++是20世纪80年代初由贝尔实验室奔贾尼斯特劳斯特鲁普发明的,
到目前为止已经有很多个版本,C++98、C++99、C++11、等等。可以说C++在从有到现在都是比较流行的编程语
之一。
2.C++与C语言相比有什么特点
C++包含了C语言但是又在C语言上进行了扩展。比如最为明显的就是添加了类这个概念,其实还有很多,
比如,添加了bool类型,还有函数的重载,封装,多态等一些特性。为什么变成这样呢?因为这样就可以跟贴近于
人的生活,更像是一个世界, 所有事物都是由对象构成。
3.为什么C++支持重载而C语言不行呢?
重载是具有相同的函数名但是有不同的函数参数,那么C++支持而C语言不支持呢?
主要是C语言与C++的命名规则不同,函数在编译的时候会自动的将函数名加以修改,C++是函数名加上每个参数的类型的首字母,而C语言只是在函数名前面加上一个下划线。所以C++重载参数个数不同类型不同函数名相同都是可以编译通过,因为在编译器看来就是不同的函数。
4.了解C++中什么是函数缺省
函数缺省就是在函数传参时我可以少穿一个或者不传但这个是有条件的
首先是全缺省:
例如
int Func(int a = 1, int b = 2)
{
return a+b;
}
int main()
{
int ret = Func(); // 这里就是函数缺省,全缺省。
return 0;
}
半缺省:
例如
int Func(int a, int b = 2)
{
return a+b;
}
int main()
{
int ret = Func(1); // 这里就是函数缺省,半缺省。
return 0;
}
在这里半缺省只能缺省右边参数,而默认传值是最左边的参数传值。
5.对于C++的命名空间的解释与作用
当我们写C++代码时候开头总会写using namespace std; 为什么要写这个呢?
这就是说明了C++可以在代码中给不同的变量起相同的名字,而在C语言中就不能起相同的名字。
而写的using nemaspace std; 这里的std即是一个标准库也是一个命名空间,这个空间的名字就叫做std。
在用的过程中只要加上域作用符号就行了,比如std::xxx
那么,为什么要有命名空间的出现呢,这个就是为了防止给变量起名字冲突而出项的,在不同的命名空间里面
就可以给不同的变量起相同的变量。
在这里要注意
1)命名空间可以重叠,也就是说可以嵌套
2)对于命名空间来说,命名空间的名字不能相同
6.关于C++中的引用
a)什么是引用
关于引用,其实可以通俗的理解为给变量起别名,当然这是为了更好的理解,引用的格式是 类型& 变量名 = 变量;
举个例子:首先我们来创建一个变量 int a = 3;那么 int& b = a;这里的b 就是 a 的别名,在后面b 就是a ,a就是b
因为这两个名字都指向同一块内存空间。
b)引用的特点
1)引用必须要进行初始化
2)引用只能引用一次变量,只能是一个变量的别名,不能是多个变量的别名
3)引用必须要类型保持一致
4)引用常量必须要加const 才能引用,不然编译失败。
c)引用作为参数是怎么回事
引用作为参数,这个其实和C语言里面的传地址特别相似,如果要讨论底层,它们是相同的原理,都是在传地址
我们来举个例子:
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 3;
int b = 4;
Swap(&a, &b); // 这是在C语言中的变量交换,我们传的是对应的位置,只需要传地址,开辟出两个指针大小的空间
return 0;
}
那么,我们来C++中用引用传值,怎么传呢?
void Swap(int &a, int &b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 3;
int b = 4;
Swap(a, b);
return 0;
}
传过去的是变量本身,但对面接受的只是变量ab的别名。
怎么理解呢,其实在函数调用函数栈帧中,创建一个函数栈帧需要开辟零时空间,就拿上面的传值来讲
a穿过去接受的只是一个别名,就像你去找某个人,但你不知道那个人具体长啥样,但你知道他的名字,然后你
为了找到他把名字告诉了能找到他的人,能找到他的那个人知道他的名字后,叫着你要找的人的小名去找了。
其实都是指的同一个人。
最简单的我们可以把传值写成 int &a = a;int &b = b;
d)引用作为返回值的理解
当引用作为返回值,返回的是地址,但是如果返回的是临时变量的地址,那么引用就会变成随机值
因为返回值引用也就是给返回值起了别名,所以当变量随着函数栈帧完成释放就会变成随机值。
所以总结为,返回值的引用不要将临时变量引用返回,如果出了作用域对象还在没有被销毁可以采用引用返回值
e)引用的根本原理
引用在表面上看是给变量起了别名,而如果要从汇编代码上看,本质还是地址,和C语言的指针基本相同
不过C语言要额外开辟一个指针的的大小来保存原变量地址。引用就省去了保存地址的指针。
f)引用与C语言中的指针有什么不同
1)引用必须初始化到某个变量或者对象,而指针可以为NULL
2)sizeof()指针大小永远都是指针的大小,而引用中sizeof()引用的对象大小,就是对象的本身大小。
以上是入门C++的小知识点。如有不足还望指出,后续还会不断更新。。。
上一篇: JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】 图表图表库图表控件JavaScripthtml5
下一篇: int与Long需要注意的值范围
推荐阅读
-
用一个小程序设计来讲述Android的入门开发
-
php入门学习知识点一 PHP与MYSql连接与查询
-
c++小知识点(5)
-
c++:请编写一个函数,对字符串“zheshigekendiedetimu”按从大到小的顺序排列,并截取后n位数(n为函数的一个参数)。
-
入门大数据一定要掌握的知识点
-
8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
-
C++知识点记录【一】—— enum class
-
Java常用小知识点(一)
-
C++中关于map的一些知识点
-
【小知识点】C++ :error C2011:'enum' type redefinition的解决方法汇总