一、域运算符

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、带默认形参值的函数二义性

  • 重载的函数中如果形参带有默认值时,可能产生二义性
posted on 2023-02-20 14:59  ReggieNew  阅读(15)  评论(0编辑  收藏  举报