一、命名空间
解决命名冲突:假设一个程序调用多个库函数,多个库函数中的全局变量冲突了
namespace fun
{
int a = 10;
}
namespace kun
{
int a = 20;
}
cout<<fun::a<<endl; //输出为10
二、输入输出流
对流的操作就是对文件的操作
cin:从键盘输入的标准输入流
cout:从屏幕输出的标准输出流
《C Primer Plus》中说,C程序处理一个流而不是直接处理文件(联想到了IO知识点)——属于进阶知识点了。
三、引用
引用:取别名,对引用的操作即对变量的操作。
int a = 10; //变量
int &b = a; //b就是a的别名
Tips: 引用和指针的区别 ?:
- 指针开辟空间,引用不开辟空间
- 指针可不初始化,引用必须初始化
- 指针+1是移动,引用+1是数值加一
- 有void*的指针,没有void类型的引用
- 有多级指针,无多级引用
- 有数组指针、函数指针,无数组引用、函数引用
- 指针只能指向字符串常量,引用可以是任意常量
- 指针可以是空指针,引用不能是空引用
四、函数重载
C++中,函数名相同(功能类似),形参(个数、类型、顺序)不同,与返回值无关的一类函数称为重载函数。
问题(1). C语言函数为啥不能同名 ?:
C语言中调用函数(函数本质即内存中一段二进制代码)时,函数名是这段二进制代码的入口,入口只能有一个,所以函数不能同名。
问题(2). C++为啥函数可以同名呢 ?:
g++编译会对函数名进行重命名
五、默认参数
函数声明时,形参若有初始声明值,调用时不传参使用初始值,传参则使用实参值,且定义时不写默认参数。
Tips:
- 默认参数设置从右至左
void fun(int a=3,int b,int c=4); //这是错误的!! - 传参从左至右
六、C++如何选择性调用C库函数(C/C++混合编程)
#include<stdio.h>
int main()
{
#ifdef __cplusplus
printf("g++\r\n");
#else
printf("gcc\r\n");
#endif
return 0;
}
#include<stdio.h>
int main()
{
if(1 == sizeof('a'))
printf("g++\r\n");
else
printf("gcc\r\n");
return 0;
}
七、关于 new delete 运算符
new:在堆区申请内存空间,功能和malloc一样
delete:释放从堆区申请的空间,功能和free一样
Tips:
- 前者时运算符,后者是函数
- 后者需要强制转换且需要自行计算申请空间大小
int *p;
p = (int *)malloc(sizeof(int)); //malloc()之前最好memset()一下
//malloc还没有掌握其本质(挖个坑先),记得free
int *p = new int;
delete p;
//————————————————————————————————————————————————————————————
int *p = (int *)malloc(sizeof(int)*10);
int *p = new int[10];
delete int[]p;