C++入门语法

命名空间

命名空间可以存放类、对象、函数等,相当于一个大的代码块。在工程文件较大、对象较多时,可防止对象“重名”。

命名空间的定义

语法格式如下:

namespace <空间名> {
    <内容>
}

例如:

//NameSpace.h
namespace NS {
    int m = 10;
    int n = 20;

    int add(int x, int y) {
        return x + y;
    }

    class MyClass {
        int val;
        MyClass * next;
    };

    int mul(int x);

    int mul(int x) {
        return x * x;
    }
}

命名空间的使用方法:

展开方式之一:<空间名>::<成员名>

例如:NS::m 就是在访问 NS 空间中的 m 对象

//NameSpace.cpp

int main(void) {

    //查看NS中m, n的值
    printf("m = %d\n", NS::m);
    printf("n = %d\n", NS::n);
    //调用NS中的add() 和 mul()
    int a = NS::add(NS::m, NS::n);
    int b = NS::mul(NS::m, NS::n);
    //显示结果
    printf("m + n = %d\n", a);
    printf("m * n = %d\n", b);

    return 0;
}

使用方法之二:用 using 关键字将某个成员引入

语法:

using <空间名>::<成员名>;
int main(void) {

    using NS::m;
    printf("m = %d\n", m);
    
}

使用方法之三:using 关键字引入整个命名空间,可以使用 using namespace <空间名>; 的方式来引入命名空间,这样使用的时候就不用带空间名了。

int main(void) {
    using namespace NS;
    
    int a = add(m, n);
    int b = mul(m, n);

    printf("m + n = %d\n", a);
    printf("m * n = %d\n", b);


    return 0;
}

命名空间的细节

命名空间可以嵌套定义和使用

namespace N1 {
    int a = 100;

    namespace N2 {
        int a = 1000;
    }
}


int main(void) {
    using namespace N1;
    printf("N1::a = %d\n", a);
    //命名空间N1已经被引入, 其中的成员可以被自由使用, 所以运用N2中的变量a不需要再写N1::N2::b
    printf("N1::N2::a = %d\n", N2::a);

    return 0;
}

在一个工程中可以有多个重名的命名空间,最终编译器会将它们整合到一个命名空间当中。

如下语言中在 test.htest.c 中的两个命名空间到最后会被整合到一个命名空间中去。

//test.h
namespace NS {
    int x = 10;
    int y = 20;
}

//test.c

namespace NS {
    int add(int x, int y) {
        return x + y;
    }
}

缺省参数

概念

给函数的参数一个默认的值, 如果调用的时候没有指定实参的值, 则把给定的默认值作为实参, 其中给定值的参数叫做 缺省参数

在下例中可以看出, 不给定实参的输出 0, 给定的输出 1145:

#include <iostream>

using namespace std;

void f(int a = 0) {
    cout << "a = " << a << "\n";
}

int main(void) {
    //不给参数
    f();
    //给参数
    f(1145);
    return 0;
}

分类

全缺省函数: 顾名思义, 就是所有的参数都有默认给定的值, 就像下面这个:

void f(int a = 1, int b = 2, int c = 3) {
    cout << a << "\n";
    cout << b << "\n";
    cout << c << "\n";
}

int main(void) {
    f();
    return 0;
}

半缺省函数: 一部分参数给定了默认值. 如下:

void f(int a, int b = 2, int c = 3) {
        cout << a << "\n";
        cout << b << "\n";
        cout << c << "\n";
}
    
int main(void) {
    // f()              //报错: 缺少参数
    f(114);             //输出 114, 2, 3
    f(114, 514);        //输出 114, 514, 3
    f(114, 514, 1919);  //输出 114, 514, 1919
    return 0;
}

半缺省函数的注意事项:

  • 参数必须从右往左依次给出, 必须从右向左指定值, 中间不能间断. 即, 带默认值的参数后面不能有不带默认值的参数.

    void f(int a = 0, int b, int c = 10);         //错误
    void f(int a, int b = 0, int c = 10);         //正确
    
  • 缺省参数不能在函数声明和定义中同时出现. 缺省参数只能在函数声明中指定,不能在函数定义中重复指定。

    正确做法: 声明时带缺省参数, 实现时不带

      void f(int a, int b = 2, int c = 3);        //正确
      void f(int a, int b, int c) {
          ...
      }
    

    错误示范: 声明时和实现时都带缺省参数

      void f(int a, int b = 2, int c = 3);        //错误
      void f(int a, int b = 2, int c = 3) {
          ...
      }
    
posted @ 2025-02-24 23:05  codels  阅读(49)  评论(0)    收藏  举报