C++语法代码总结

1.函数重载

2.引用

函数重载:

函数重载概念:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,

这些同名函数的形参列表(参数个数或类型或顺序不同),常用来处理类似数据类型不同的问题

下面讲解同一作用域:

   这段代码中print函数不构成函数重载,原因:第一个print函数在s1命名空间域中,第二个print函数在s2命名空间域中,不在同一作用域,因此不构成函数重载

   请注意这段代码同样不构成函数重载,因为展开命名空间域,只是会影响搜索函数/变量的范围,print函数还是在不同的作用域中

  但如果调用,会产生调用歧义,而不是函数重载的关系(并且也不构成函数重载)

下面讲解:返回值不同,不构成重载条件

   

下面讲解:隐式类型转换对函数重载的影响

   这段代码构成函数重载(参数顺序不同),并且由于每个调用函数都有与之匹配的print函数,因此没有隐式类型转化

  这段代码会涉及到隐式类型转化

   这段代码会产生调用歧义  , 可以调第一个函数,也可以调第二个

下面讲解一段代码:

   这段代码会构成函数重载,但会产生调用歧义

下面简单讲解下原理:

  头文件:

源文件:

源文件:

在主函数中,去调用print函数,先在函数声明中得到一个地址(不是函数的地址,只是一个函数声明的地址),链接时,会拿函数名和参数列表去找函数的地址

当我把函数的定义给屏蔽掉,会出现这样的错误:

obj 为链接时产生的文件,print(void) 可以说明 去找函数的定义时,是根据函数名和参数列表

,C语言中只是根据函数名去找

2.引用  : 给变量取别名

int main()
{
        int a = 0;

        int& b = a;  b是a的别名

        return 0;
}

一个变量可以支持多个别名

int main()
{
        int a = 0;

        int& b = a;

        int& c = a;

        int& d = a;

        return 0;

}

运用:

  

下面讲解一段代码:

  链表的头插,因为要改变头指针的位置,

所以可以传二级指针,或传一级指针的引用

   

typedef struc ListNode*  ->  head

注意:引用类型必须和引用实体同类型

        引用必须初始化   int& a;    这种写法是不对的

        引用不可以重新赋值:  int a; int b ; int & p = a; p = b;这种写法是错的

下面讲引用和权限

首先权限只可以平替和缩小

const int m = 0 m只读

int& n= m; n 可以读和写 

因此权限放大

修改  const int m = 0;

        const int& n = m; 权限的平替

int m= 0;

const int & n = m; 权限的缩小

注意:

赋值不会影响权限的放大

const int n = 0;

int m = n; 这样写是对的

因为m的修改不会影响n

但请注意:

int p = m;

const  int * p = &m;

int* p2 = p;

这样是权限的放大

const 修饰的是 *p    也就是*p 不能修改

然而p2可以修改  *p

   这里m + n 时会产生 一个临时变量 , 所以要改成

const int & p= m + n;

并且隐式类型转化也具有相似的性质

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值