遗嘱中的秘密

概念学习C++17

简介

命名空间

命名空间是组织代码的重要方式。两个函数可能发生命名冲突,把它们放入不同命名空间即可区分。命名空间也可以嵌套,有助于组织大型代码库。使用作用域解析运算符 :: 访问其中的名称。

下面的示例使用两个不同的 foo 函数。给它们加上各自的命名空间前缀后,就能在同一段代码中分别调用。

namespace my_ns {
    int foo() {
        return 44;
    }
    namespace my_inner_ns {
        int baz() {
            return 90;
        }
    }
}
namespace my_other_ns {
    int foo() {
        return -2;
    }
}

int myresult{my_ns::foo() + my_other_ns::foo() * my_ns::my_inner_ns::baz()};

任务说明

你在一家知名律师事务所工作,专门处理特殊的遗嘱要求。

本练习需要打开一个神秘保险库。作为遗产执行人,你将组合三个家族长期保管的秘密片段,得到账户号码及其对应密码。

为防止任何一个家族单独打开保险库,必须合并他们掌握的信息,并使用你从遗嘱中获知的秘密修正值。

你需要完成三个任务,帮助这些家族打开保险库。

1. 面对各个家族,准备执行遗嘱

定义名为 estate_executor 的命名空间。后续任务的代码都应写在这个命名空间内。

namespace some_name {
    // The space between the curly brackets
    // is called body of the  namespace.
}

2. 找出秘密账户号码

关键时刻到了。只有你掌握了揭示账户号码所需的秘密修正值。

定义 assemble_account_number(int secret_modifier) 函数,接收秘密修正值,返回组合得到的 int 类型账户号码。

要得到正确号码,需要调用三个家族各自的 bank_number_part,并将返回值相加。

3. 最后一步:输入秘密密码

遗嘱要求先将所有蓝色片段相加,再将所有红色片段相加,最后把这两个和相乘,得到密码。

定义 assemble_code() 函数,将三个家族的片段合并为一个整数密码并返回。函数不接收参数,仅依赖各家族相关命名空间中的信息。

需要一点帮助?查看分步提示

提示

通用提示

  • 不要修改各家族命名空间中的代码。
  • 不要把数值复制到你的代码中,应调用相应函数。

1. 准备执行遗嘱

  • 测试要求命名空间准确命名为 estate_executor。

2. 找出秘密账户号码

调用每个 bank_number_part 时,都要传入参数列表中的 secret_modifier。

3. 输入秘密密码

  • 可以通过 outer_namespace::inner_namespac::my_function 这样的形式调用嵌套命名空间中的函数。

  • 先分别求出蓝色片段之和与红色片段之和,再将二者相乘。