一、c++和c的区别:
1.函数默认值。
在C++中我们在定义或声明一个函数的时候,有时会在形参中给它赋一个初始值作为不传参数时候的缺省值,例如:int is(int a=100);代表没有传参调用的时候,自动给a赋一个10的初始值,这在c语言里是没有且错误的语法。
2.函数重载
C语言中产生函数符号的规则是根据名称产生,这也就注定了c语言不存在函数重载的概念。而C++生成函数符号则考虑了函数名、参数个数、参数类型。
#include <iostream>
using namespace std;
bool compare(int a,int b)
{
return a > b;
}
bool compare(double a,double b)
{
return a > b;
}
int main()
{
compare(10,20);
compare(10.5,20.5);
return 0;
}
全局作用域定义了两个函数,它们由于参数类型不同可以构成重载,此时main函数中调用则可以正确的调用到各自的函数。
总结:C语言不存在函数重载,C++根据函数名参数个数参数类型判断重载,属于静多态,必须同一作用域下才叫重载。
这是目前我学到的两个主要不同。
二、
任何的c++程序都要有using namespace std这一行,可以减少很多其他地方代码的输入,在cfree上写c++语言不加这行会无法正常运行。
c++的头文件相比较c语言的头文件,一般都是在前面多了个c,比如stdio.h在c++里面就成了cstdio,去掉了后缀的.h,在c++语言里面,#include<iostream>包含了大多数c++程序的运行头文件需要,或者直接使用c++的万能头文件#include<stdc++.h>,所有的c++头文件都包含在内。
c++的输出和输入也和c语言有所不同,输入:cin>>a;就是将输入的值赋给a 输出:cout<<a;就是将a的值输出。
可以用cin来判断是否输入的条件为空:
如果输入的n,m值为空,那么while循环就会终止。
在输出方面,输入一般较大数据是用scanf,输出有小数的时候用printf输出,不然用cout要用<iomanip>头文件,且用cout.setprecistion来修改精确精度。
三、
1.c++中用true来代表非0,false代表0。
2.与C中的malloc类似,C++中用new来动态开辟内存。new写起来会更加简明一些。
例如:c语言中int* carr=(int*)malloc(100*sizeof(int));
c++中就直接写 int* arr= new int [100];
3.c++中用&来创建引用。可以把引用当成一个不能改变指向对象的指针。
例如
在主函数中,a,b的引用后,就成了不能改变指向对象的指针。
四、c++里面的标准库有<vector> 、 <string> 、<algorithm>等等
1.
<cstring> :strlen() 字符串长度 strcmp() 字符串比较 strcpy() 字符串拷贝 memset() 暴力清空 memcpy() 暴力拷贝
<cstdlib>: qsort() C语言快排 rand() 随机数 malloc() free() C语言动态分配内存 <ctime> :time(0) 从1970年到现在的秒数(配合随机数) clock() 程序启动到目前位置的毫秒数
<cctype> :isdigit(), isalpha(),判断字符是否为数字、大小写字母
algorithm和之前两个头文件不同,它没有定义什么新的类型,而是定义了很多使用的算法,极大简化了代码量。
2.C++ STL <vector> 数组
vector<int> arr(100); 等同于 int arr2[100]
vector<int>::iterator p1; int* p2;
与普通的数组类似,vector也可以使用指针来访问遍历每一个元素。STL中的指针被称为“迭代器(iterator)”。
3.sort 快速排序
定义一个数组 arr,长度为n。
sort(arr,arr+n),比较函数参数是两个待比较变量,返回值是比较的bool值 内部排序函数是按小于关系来的,排序结果是升序比较函数参数是两个待比较变量,返回值是比较的bool值 内部排序函数是按小于关系来的,排序结果是升序。
想要改变最终结果的排序是升序还是降序,可以在sort后面增加参数。
俞