C++基础入门

一· 命名空间(namespace)

正常namespace的使用

include <stdio.h>
#include <stdlib.h>
// 1. 正常的命名空间定义
// wzh是命名空间的名字,⼀般开发中是⽤项⽬名字做命名空间名。
namespace bit
{
    // 命名空间中可以定义变量/函数/类型
    int rand = 10;
    int Add(int left, int right)
    {
        return left + right;
    }
    struct Node
    {
        struct Node* next;
        int val;
    };
}
int main()
{
    // 这⾥默认是访问的是全局的rand函数指针
    printf("%p\n", rand);
    // 这⾥指定bit命名空间中的rand
    printf("%d\n", wzh::rand);
    return 0;
}

命名空间嵌套

//在kj这个公司里面有zs  ls 两个人 各自用自己命名空间里的东西
namespace kj
{
    // zs
    namespace zs
    {
        int rand = 1;
        int Add(int left, int right)
        {
        return left + right;
        }
    }
    // ls
    namespace ls
    {
        int rand = 2;

         int Add(int left, int right)
        {
            return (left + right)*10;
        }
    }
}
int main()
{
printf("%d\n", kj::zs::rand);
printf("%d\n", kj::ls::rand);
printf("%d\n", kj::zs::Add(1, 2));
printf("%d\n", kj::ls::Add(1, 2));
return 0;
}

多文件定义同名namespace

多文件定义同名namespace代码量有点长,这边就不展示了,下面列出需要注意的点

  • 多⽂件中可以定义同名namespace,他们会默认合并到⼀起,就像同⼀个namespace⼀样

namespace定义

  1. 命名空间中可以定义变量/函数/类型等。
  2. namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量
  3. namespace只能定义在全局,当然他还可以嵌套定义

命名空间的使用

  • 指定命名空间访问,项⽬中推荐这种⽅式。
    
    namespace bit
    {
        int a = 0;
        int b = 1;
    }
    
    int main()
    {
        printf("%d\n", N::a);
        return 0;
    }
    

  • using将命名空间中某个成员展开,用于经常访问的不存在冲突的成员推荐这种⽅式。 
namespace bit
{
    int a = 0;
    int b = 1;
}

using N::b;//将命名空间中某个成员展开
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    return 0;
}
  • 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
namespace bit
{
    int a = 0;
    int b = 1;
}

using namespce N; //将命名空间中全部成员展开
int main()
{
    printf("%d\n", a);
    printf("%d\n", b);
    return 0;
}

二· 缺省参数

  • 在调⽤该函数时,如果没有指定实参采⽤该形参的值缺省
  • 全缺省就是全部形参给缺省值
  • // 全缺省
    void Func1(int a = 10, int b = 20, int c = 30)
    {
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        cout << "c = " << c << endl << endl;
    }
  • 半缺省就是部分形参给缺省值(不是一半给缺省值)

           注意:半缺省参数必须从右往左 依次连续缺省不能间隔跳跃给缺省值。

// 半缺省
void Func2(int a, int b = 10, int c = 20)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl << endl;
}
  • 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。
// 半缺省
void Func2(int a, int b = 10, int c = 20)
{
     cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl << endl;
}
int main()
{
//调用是必须从左往右给值,不能跳跃传参
    Func2();
    Func2(1);
    Func2(1,2);
    Func2(1,2,3);
}
  • 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

函数重载

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同

注意:返回值不同不能作为重载条件,因为调用时无法区分

参数类型不同

// 1、参数类型不同
int Add(int left, int right)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}

double Add(double left, double right)
{
    cout << "double Add(double left, double right)" << endl;
    return left + right;
}

参数个数不同 

// 1、参数个数不同
int Add(int left, int right)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}

int Add(int left)
{

    return left;
}

参数类型顺序不同 

// 3、参数类型顺序不同
void f(int a, char b)
{
    cout << "f(int a,char b)" << endl;
}

void f(char b, int a)
{
    cout << "f(char b, int a)" << endl;
}

特殊情况报错 

// 下⾯两个函数构成重载
// f1()调⽤时,会报错,存在歧义,编译器不知道调⽤谁
void f1()
{
    cout << "f()" << endl;
}
void f1(int a = 10)
{
    cout << "f(int a)" << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值