C++语法的拓展
输入输出的不同
就输入输出而言c语言用的是传统的stdio.h标准输入做到的,实现的方法是通过不定参数达到格式化输出的目的,由于面向过程的变成思路导致它非常的繁琐
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
printf("a = %d\n",a);
return 0;
}
c++则不同,初学者一般都会用iostream这个标准输入输出流,有趣的是c++头文件没有.h,取而代之的是引入了命名空间这个概念,我们可以通过引入命名空间来引入头文件中的输入输出流,这里的输入输出流也非常灵活,结尾的endl取代了c语言中的换行
#include <iostream>
using namespace std;
int main()
{
int a = 0;
cin >> a; // cin理解成键盘,值由键盘产生流向a
cout << "a = " << a << endl; // cout理解成屏幕,数据流向屏幕
return 0;
}
实际上C语言的printfC++也可以用只是cout更简单
类型的增加
相比c语言的类型c++增加了string和bool类型
其中string类型用于创建字符串,代替了c语言中用字符char的数组的形式去装字符串
//c语言风格的字符串
int main()
{
char str1[] = "hello world";
printf("%s\n",str1);
return 0;
}
//c++风格的字符串
int main()
{
string str2 = "hello world";
cout << str2 << endl;
return 0;
}
至于布尔类型就是true和false,本质上true是1 false是0。布尔类型占用的空间实际上很容易被误解成只占用一位,实际上占用一个字节它的大小和char相同,所以实际上c可以通过枚举类型达到c++的布尔类型效果
#include <stdio.h>
typedef enum
{
true = 1,
false = 0
}bool; // 用枚举类型实现布尔类型
int main()
{
bool a;
a = true;
printf("a = %d", a);
return 0;
}
#include <iostream>
using namespace std;
int main()
{
bool a;
a = true;
cout << "a=" << a << endl;
return 0;
}
申请内存不同
用户申请内存上来说c语言就显得比较繁琐,c语言借助stlib.h里的malloc函数去申请内存:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* p;
p = (char*)malloc(10);//向内存申请空间
for (int i = 0; i < 10; i++)
{
p[i] = 1;
}
for (int i = 0; i < 10; i++)
{
printf("%d",p[i]);
}
free(p);//释放p中指的地址的内存
return 0;
}
相比于c c++使用了关键词new去代替的原有的类型
#include <stdio.h>
int main()
{
int* p = new int(10);
for (int i = 0; i < 10; i++)
{
p[i] = 1;
}
for (int i = 0; i < 10; i++)
{
printf("%d",p[i]);
}
delete p;
return 0;
}
C++的引用类型
数据类型 &别名 = 原名
这是一个给变量取别名的方法,换句话说两个变量名(本名和别名)表示同一个地址里的值,当这个
值被某个名字调用后修改了,另一个名字访问它后也是修改后的
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = &a;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
别名有个使用限制,那就是它必须要在申明时候去给他赋值,而且后续无法修改变量。这里大家可以窥见其本质,对的,就是指针常量
在函数中用引用可以减少我们的书写,这样写的时候非常方便不用加入很多的取值符号*
#include <iostream>
using namespace std;
void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
Swap(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
实际上也可以作为函数的返回值,这里如果理解起来困难,可以把它当作指针函数
#include <iostream>
using namespace std;
int& Test()
{
static int a = 10; // 这里同C的指针函数一样,不能返回局部变量
return a;
}
int main()
{
int a;
a = Test();
Test() = a+10; // 这里同C的指针函数一样,可以作为左值
cout << "a = " << Test() << endl;
return 0;
}
C++函数的拓展
函数的默认参数
在C++中允许函数拥有默认的参数,当我们没有赋值的时候它会成为我们的默认值
语法:返回值类型 函数名(参数 = 默认值){}
#include <iostream>
using namespace std;
int Fun(int a, int b = 20, int c = 30);// 函数申明一般写默认值,默认参数必须放到非默认参数后面
int main()
{
cout << Fun(10, 20, 30) << endl;
cout << Fun(10) << endl;
return 0;
}
int Fun(int a, int b, int c) // 函数实现和申明不能同时有默认值
{
return a,b,c;
}