从零开始的c++(一)

1.就业方向:游戏行业、后端、嵌入式等,需求相对少于java,但仍是很值得学习的一门语言。

2.命名空间:

常见的命名空间有 using namespace std;此处的std就是C++的标准库里的命名空间。

命名空间的作用:命名空间可以让你自己创建一个独立的作用域,可以有效避免不同人写相同的函数名导致命名冲突。

创建命名空间:

namespace st
{
    int rand = 1;

    int add(int a, int b)
    {
        return a + b;
    }

    struct node
    {
        int rand;
        char str;
    };

}

此处创建了一个名叫st的命名空间,空间内包含一个整形变量rand,一个函数add,一个结构体。

调用命名空间:

void test()
{

    printf("%d \n", st::rand);
    printf("%d \n", st::add(1, 2));

    struct st::node st;


}

此处是在函数内单独对每一个变量或函数说明其是命名空间st内的。

using st::add;

void test()
{

    printf("%d", add(1, 2));


}

此处using st::add;用了部分展开,即从此往下调用add函数默认是调用命名空间st内的add函数。

using namespace st;

此处用了全部展开,此后调用命名空间内的变量、函数等可以忽略“st::"。

注意:当使用部分展开或全部展开以后,必须确保不会再出现相同名、相同函数参数的函数,否则仍会出现函数调用不明确的错误。

总结一下命名空间,就是类似额外开辟了一份单独的空间(作用域),然后定义了一些只能在这个空间内使用的成员。

2.函数重载:

函数重载的条件:1、函数名相同。2、函数的参数不同(形参类型不同或形参个数不同或形参顺序不同)。3、相同作用域。(注:返回类型不同不是重载的条件)

函数重载的作用:获得同名但是效果不一定相同的函数。

int add(int a, int b)
{
    return a + b;
}

int add(double a, double b)
{
    return (int)(a + b);
}

上述两个函数函数名均是add,但函数形参不同,因此是函数重载,此时根据传入参数的类型,编译器会选择合适的函数调用。

3.函数参数缺省

int add(int a=1)
{
return a+1;
}

函数缺省通常是在函数定义或者声明时(注:声明和定义中只能有一次用函数缺省),在形参的参数名后跟一个“=x”,此处x必须是常量或宏常量。此时使用该函数若不传这个参数则会默认参数的值是x,若传参数则参数的值就是传进来的。

函数缺省的注意事项:1.从左侧第一个缺省参数开始往右所有参数都必须是缺省类型。

从零开始的c++(一)_第1张图片

2.函数使用的时候输入的数必须从最左侧的形参开始对应。不能出现第一个数对应形参第二个数等类似的情况。

从零开始的c++(一)_第2张图片

在了解了函数重载和默认参数后,也许会产生一个疑问,以下代码是否可以成功调用:

int add(int a ,int b=2)
{
    return a + b;
}

int add(int a)
{
    return a + 1;
}


int main()
{
    printf("%d ",add(1));
    return 0;
}

首先两个add函数的参数个数不同、作用域相同、函数名相同,因此是函数重载,但此时只传了一个参数,到底是调用只有一个形参的 int add(int a),还是当做一个参数是默认的int add(int a,int b=2)?答案是编译器无法确定,因此会报错。

在本篇中,初步介绍了命名空间、默认参数和函数重载。

你可能感兴趣的:(c++,开发语言)