c++对于c语言的补充(作用域,命名空间和引用)

作用域和命名空间

c++面向对象 oop
作用域 :: 相当于python的.
命名空间 namespace,其几点注意如下

  1. 命名空间只能在全局范围定义,不能在函数内部定义 2. 命名空间可以嵌套 A:B:a 是可以的
  2. 命名空间是开放的,可以初始化后再添加 4.可以声明和实现分离 5.可以对命名空间取别名
namespace A{
    int a = 10;
    int b = 10;

}

void test01()
{

    cout << A::a <<endl;

    using namespace A; // using 可以声明命名空间,这样就不用写A::b,算是简写化,但是也有冲突的问题,除非特别大的项目否则不推荐
    cout << b << endl;

}

reference

引用 reference 在c/c++中指针的作用基本都是一样的,但是c++增加了另一种给函数传递地址的途径,叫按引用传递(pass-by-reference)
引用的本质就是给变量取别名
步骤说过很多次,这里记录一次 1. &别名 2.给哪个变量取别名 就定义该变量 3.从上往下整体替换 (替换的是原来的名字,不包括( )和[ ]等)
例子

  1. &myarr 2. int arr[5] 3.int (&myarr)[5] = arr
  2. &myp 2. int *p 3. int *&myp = p
  3. &myfunc 2. void func(void) 3. void (&myfunc)(void) = func
void test02()
{

    int a = 10;
    // 给变量a取别名b,引用必须初始化,系统不会为引用开辟空间
    int &b = a;// 注意这里不是取地址符!!!这里是修饰变量为引用 b就是a的引用!!!

    //操作b等价与操作a,a和b代表同一空间内容
    cout << &a << endl;
    cout << &b << endl;// 两个的地址都是一样的

    b = 100;
    cout << a << endl;// 操作了b相当于操作了a

}

作用:引用不用取地址函数内部也能操作外部变量


void swap01(int a,int b)
{
    int c = a;
    a = b;
    b = c;

}

void swap02(int *a,int *b)
{
    int c = *a;
    *a = *b;
    *b = c;

}
void swap03(int &a,int &b)
{
    int c = a;
    a = b;
    b = c;

}
void test03()
{
    int a = 10;
    int b = 20;

//    swap01(a,b); // a = 10, b = 20
//    swap02(&a,&b);// a = 20, b = 10
    swap03(a,b);// a = 20, b = 10 三个对比就是引用的作用,引用不用取地址函数内部也能操作外部变量

    cout << "a = "<<a<<endl;
    cout <<"b = " <<b<<endl;

}

常引用 const int &a
在作为函数的输入参数用引用,函数内部的修改会导致整个进程中该参数发生修改,当不想发生整个情况时,用常引用

void swap04(const int &a,int &b)
{

    int c = a;
//    a = b; //报错
    b = c;
}

void test04()
{

    int a = 10;
    int b = 20;

    swap04(a,b);// a = 10, b = 10 用了常引用 a的值不能变化

    cout << "a = "<<a<<endl;
    cout <<"b = " <<b<<endl;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值