引言:
C++——源于C语言,区别在哪里?
概述:
C++是一门介于面向过程和面向对象的混合语言,今天小编就来总结一下它面向过程的一些特点。
内容:
1 函数重载:
使同一个函数具备多种功能,以定义原型版本为区别,例如func1(char);func1 (int,int) ,函数名相同,参数以及功能不同。与面向对象类的方法重载类似。
2 类型注意事项:
(1)C++标准限定int和short至少需要16位,long至少需要32位,short不长于int,int不长于long。Visual C++ 6.0规定int使用4字节,32位。
(2)地址运算符"&"用来取对象存储的首地址。
(3)整型常量:十进制常量、长整型常量(后缀L或I)、八进制常量(前缀0)、十六进制常量(前缀Ox )。可以用后缀表示浮点常量的类型:F或f表示是float类型,L或l表示long类型,无后缀就是double类型。
(4)转义字符"\*"
3 动态分配内存:
指针名 = new 结构名; //分配
delete 指针名;
//释放
4 引用:
(1)何为引用:为现有对象起个别名,将一个新标识符合一块已存在的存储区域相关联
(2)声明方式:数据类型& 别名 = 对象名 ,对象必须事先初始化,&符号位置无要求。
(3)注意事项:1)不能有空引用,即必须要确保引用和一块正确的存储区域相关联
2)引用实际为变量的别名,使用引用就是直接使用变量,引用只作为一种标识对象的手段,不能直接声明对数组的引用,也不能声明引用的引用。
(4)指针与引用对比:
1)相同之处:都是地址范畴,指针指向一块内存,内容为所指内存的地址;引用是某块内存的别名。
2)不同之处:指针是一个实体,而引用仅是个别名;
引用使用时无需解引用(*),指针需要解引用;
引用只能在定义时被初始化一次,之后不可变;指针可变;(引用指向固定的一块内存地址,但是指针指向的内存地址是可变);
引用没有const,本身不可变;指针有const;
引用不能为空,指针可以;
“sizeof”引用得到的是所指向的变量(对象)的大小,而“sizeof”指针得到的是指针本身(所指向的变量或对象的地址)的大小。
指针和引用的自增(++)运算意义不一样;引用相当于对象自加,而指针是地址的移动,若将指针解引用后再自增就和引用自增一样,例如 (*p)++,相当于(int a = 0 ; int b = &a;) b++;
从内存分配上看:程序为指针变量分配内存区域,指针相当于一个数据类型,而引用不需要分配内存区域,只是一个别名。
5 指针:可以通过指向对象在内存中的地址,对对象进行修改等操作。
(1)何为指针:一种数据类型或者作为一种实体。若为实体,用来保存一个内存地址的计算机语言中的变量;若为数据类型,描述了一种对象,其值为对被引用类型的实体的引用。
(2)
有何用处:
1)数据传递,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,提高传输速度,节省大量内存
2)数据转换,利用指针灵活的类型转换,可以用来做数据类型转换,比较常用于通讯缓冲区的填充,比如说,一个数据缓冲区char
buf[100],如果其中buf[0,1]为命令号,buf[2,3]为类型,buf[4~7]为某一数值,类型为int,就可以使用如下语句进行赋值:
3)函数指针,形如:#define PMYFUN (void*)(int,int),可以用在大量分支处理的实例当中,如某通讯根据不同的命令号执行不同类型的命令,则可以建立一个函数指针数组,进行散转。
4)在数据结构中,链表、树、图等大量的应用都离不开指针。
(3) 指针类型:指针使用的几种类型,包括常变量以及数组等类型。
1)常量:指向常量的指针:在非常量指针声明前面使用const,例如 const int *p。仅仅限制了使用*p的方式,即*p不能用作左操作数,也就是*p不能用作*p=;但是*p仍然能作为右操作数,也可以使用运算符“&”改变指针指向,即换一个地址。
常量指针:将const限定符放在*号右边,使得指针本身成为一个const指针。意思就是指针的方向不可改变了,固定指向一个地址,但是通过*p=56,可以改变改地址的值域中的值,
指向常量的常量指针:指针和指向的对象都不能改变,必须初始化指针。运算符*和&都被限制。
2)数组:
数组指针:首先它是一个指针,它指向一个数组,也可以称之为指向以为数组的指针,或者称之为行指针。
指针数组:首先它是一个数组,数组到元素都是指针。
注意:如何区分数组指针和指针数组哪?通过一个符号结合的优先级()>[]>*
例如 int * a[10],由于[]的优先级高于* ,所以 a先和[]结合,成为一个数组,然后前面再加*好,表示一个指向数组的指针,称之为数组指针。若int (*a)[10],由于()的优先级高于[],所以a先与*号结合,表示为一个指针,然后在于[10]结合,称之为指针的数组。
6 泛型算法:提供的操作与元素的数据类型无关。
(1)在普通数组中的应用:
1) 输出数组、对数组进行升幂排序、反转数组内容、赋值数组内容等操作,需要包含头文件<algorithm>
数组内容反转:reverse(a , a + Len),数组a首元素变为尾元素,也称反向或逆向操作。
复制数组内容:copy(a , a + Len, b),将数组a的数据复制到b中;逆向复制:reverse_copy(a , a + Len, b)。
数组升幂排序:sort(a ,a + Len),数组默认升幂排序。
输出数组内容:copy(a, a + Len ostream_iterator <Type>(cout,"字符串")),ostream_iterator为输出流操作符,<Type>为数组的类型,将数组内容按正向方式在屏幕输出,输出方式是将每个元素与“字符串”的内容组合在一起输出,也可以使用空格和换行符(\n);若要逆向输出,将copy改为reverser_copy即可。
注意:字符串数组需要一个结束符,正向复制可以不需要复制结束符,但逆向复制时要注意不能讲结束符复制,不然得到的字符串第一位变成了结束标志,成为了空字符串。
2)
对数组进行降幂排序和检索,需要包含头文件<functional>。
数组降幂排序:sort(a , a + Len, greater <Type> ()),
查找数组内容:find(a , a + Len , value),//查找数组a中是否存在值为value的数据。
7 输入输出原理:
(1) C++俩种格式控制方式:
1) iso_base类提供的接口
2) 使用特殊函数,操控符
特点:可直接包含在输入输出的表达式中;
带形式参数的操控符定义在头文件<iomanip>中,不带形式参数的操控符定义在头文件<iostream>中,使用时正确包含;
只有与符号“<<”或“>>”连接时才起作用;
无参数的操控符函数不能带有“()”号。
总结:
那么C++在面向过程上为什么能区别与C语言哪?核心原因在于它可以使用内联函数和引用,而C语言则不可以。下篇博客小编将为大家分享,结构体到类的一些知识,欢迎读者留言交流。
——面向过程的特点&spm=1001.2101.3001.5002&articleId=52688266&d=1&t=3&u=e60435f6dbcc48e39d57c1e6ed3d1e05)
867

被折叠的 条评论
为什么被折叠?



