一、域运算符
C++中新增作用域标识符:::
1、用于对与局部变量同名的全局变量进行访问
2、用于表示类的成员
二、new、delete运算符
new运算符可以用于创建堆空间
1、成功则返回首地址,失败则异常
2、语法
- 指针变量 = new 数据类型;
- 指针变量 = new 数据类型 [长度n];
3、new 一个新对象
内存分配(operator new) (近似于C中的malloc函数)
调用构造函数
new operator 分配内存 + 调用构造函数 operator new 只分配内存 placement new 不分配内存、调用拷贝构造函数 4、delete 释放一个对象
- 调用析构函数
- 释放内存(operator delete)(近似于free)
三、重载
1、相同的作用域,如果两个函数名称相同,而参数不同,我们把它们称为重载overload
2、函数重载又称为函数的多态性(静态,编译时确定函数的入口地址(静态联编),动态联编通过virtual虚函数实现)
3、函数重载不同形式:
- 形参数量不同
- 形参类型不同
- 形参顺序不同
- 形参数量和类型都不同
4、调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定相应的被调函数
5、合法的重载例子:
int abs(int i); long abs(int i); void abs(int i); //如果返回类型不同而函数名相同、形参也相同,则是不合法的。编译器会报“语法错误”
四、name managling与extern “C”
1、name managling这里为“名字改编”
2、C++为了支持重载引入name managling技术
3、extern “C” 实现C与C++混合编程
#ifdef __cpluscplus extern "C" { #endif void fun1(int a); void fun2(double b); #ifdef __cpluscplus++++ } #endif //a.h 头文件 C/C++
五、带默认参数的函数
1、函数没有声明时,在函数定义中指定形参的默认值
2、函数既有定义又有声明时,声明时制定后,定义后就不能再指定默认值
3、默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值
int fun2(int a, int b = 6, int c = 4); //合法 int fun2(int a = 1, int b, int c = 4); //不合法
4、函数调用时,实参与形参按照从左到右的顺序进行匹配
5、带默认形参值的函数二义性
- 重载的函数中如果形参带有默认值时,可能产生二义性