C到C++(1)

域运算符

C++中增加的作用域标识符

  • 用于对与局部变量同名的全局变量进行访问
  • 用于表示类的成员,这将在关于类的一节中详细说明。
    在这里插入图片描述
    第二个是访问全局变量var

new、delete运算符

  • new运算符可以用于创建堆空间
  • 成功返回首地址
  • 语法:
    • 指针变量 = new 数据类型;
    • 指针变量 = new数据类型[长度n];
例如:
int *p;p=new int;
char *pStr=new char[50];

在这里插入图片描述

  • delete运算符可以用于释放堆空间
  • 语法:
    • delete 指针变量;
    • delete[] 指针变量;
delete p;
delete[] pStr;

new和delete一个对象的时候,做了那些事情。

  • new一个新对象
    • 内存分配(operator new)
    • 调用构造函数
      new operator 分配内存 + 调用构造函数
      operator new 只分配内存
      placement new 不分配内存、调用拷贝构造函数
  • delete释放一个对象
    • 调用析构函数
    • 释放内存(operator delete)

重载

  • 相同的作用域,如果连个函数名称相同,而参数不同,我们把他们称为重载overload
  • 函数重载又称为函数的多态性(静态多态是在函数编译时确定入口地址,动态多态是在运行时确定入口地址)
  • 函数重载不同形式:
    • 形式数量不同
    • 形式类型不同
    • 形式的顺序不同
    • 形参数量和形参类型都不同
  • 调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定相应的被调用函数
    在这里插入图片描述
    非法的重载:如果返回类型不同而函数名相同、形参也相同,则是不合法的,编译器会报“语法错误”。
//例如:
int abs(int i);
long abs(int i);
void abs(int i);

name managling与extern “c”

  • name managling这里把它翻译为名字改编。
  • C++为了支持重载,需要进行name managling
  • extern “C”实现C与C++混合编程(extern "c"表示不进行名字改编)
ifdef __cpluscplus
extern "C"
{
#endif
...
#ifdef __cpluscplus
}
#endif

有多个extern “c”可以这样写:
在这里插入图片描述

带默认参数的函数

  • 函数声明或者定义的时候,可以给形参赋予一些默认值
  • 调用函数时,若没有给出实参,则按指定的默认值进行工作。
  • 函数没有声明时,在函数定义中指定形参的默认值
  • 函数既有定义又有声明时,声明时指定后,定义后就不能再指定默认值
  • 默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值。
    • void func1(int a, double b=4.5, int c=3);//合法
    • void funv1(int a=1, double b, int c=3);//不合法
  • 函数调用时,实参与形参从左到右的顺序进行匹配
  • 重载的函数中如果形参带有默认值,可能产生二义性。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值