域运算符
C++作用域标识符 ::
- 用于对与局部变量同名的全局变量进行访问
- 用于表示类的静态成员
new/delete 运算符
new运算符
指针变量 = new 数据类型(a) 初始化数值为a
指针变量 = new 数据类型[长度n] 指针的销毁:delete []
new一个对象
内存分配(operator new),类似malloc
调用构造函数
delete一个对象
调用析构函数
释放内存(operator delete),类似free
函数的重载
如果两个函数名称相同,而参数不同
,我们把它们称为重载overload。调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定相应的被调用函数
函数重载不同形式:
形参数量不同
形参类型不同
形参的顺序不同
形参数量和形参类型都不同
如果返回类型不同而函数名相同、形参也相同,则是不合法的
,编译器会报”语法错误”
int abs(int i);
long abs(int i);
void abs(int i);
name mangling与extern “C”
name managling这里把它翻译为名字改编,C++为了支持函数重载
,需要将函数名根据参数的不同进行name managling以便区分。
extern “C” 可以实现C与C++混合编程
,被extern “C” 修饰的变量和函数
是按照C语言方式进行编译和链接的,即对C语言写的函数不进行改名
一般在C的头文件中使用,如果头文件被C代码包含并用C编译器编译,则cplusplus 没有定义,extern “C" 被略过
,如果头文件被C++代码包含并被C++编
译器编译,存在cplusplus 定义故extern “c” 提示编译器不要对 {} 内函数进行改名
#ifdef __cpluscplus
extern “C”
{
#endif
...
#ifdef __cpluscplus
}
#endif
带默认形参值的函数
函数声明和定义的时候,可以给形参赋一些默认值,使用函数时,若没有给出实参,则使用指定的默认值。
默认值的定义必须遵守从右到左的顺序
,如果某个形参没有默认值,则它左边的参数就不能有默认值
void func1(int a, double b=4.5, int c=3); //合法
void func1(int a=1, double b, int c=3); //不合法
重载的函数中如果形参带有默认值时,可能产生二义性
int add(int x = 5, int y = 6);
int add(int x = 5, int y = 6, int z = 7);
int main(void)
{
int sum;
sum = add(10, 20);
return 0;
}