コードを整理するうえで重要な方法の1つが、名前空間の使用です。
2つの関数の名前が衝突してしまうことがありますが、それぞれを別の名前空間に入れれば解決できます。
名前空間は入れ子にすることができ、大規模なコードベースを構造化するのに役立ちます。
名前空間へのアクセスには、スコープ解決演算子::を使います。
以下の例では、2つの異なるfoo関数を使っています。
それぞれの名前空間を先頭に付けることで、この2つを一緒に使うことができます。
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()};
風変わりな遺言の依頼を専門に扱う名門の法律事務所で働いています。
この演習では、謎めいた金庫を開けることになります。 遺産の執行者として、3つの一族が長く守ってきた秘密のコードを組み合わせ、口座番号とそれに対応するコードを導き出します。
どの一族も単独では金庫を開けられないよう、一族の知識と、遺言書から知っている秘密の修飾子を組み合わせなければ金庫は開きません。
タスクは3つあり、いずれも一族が金庫を開ける手助けをするためのものです。
estate_executorという名前空間を定義します。
以降のタスクのコードは、estate_executor名前空間の本体に定義します。
namespace some_name {
// The space between the curly brackets
// is called body of the namespace.
}
いよいよ本番です。 秘密の口座番号を明かすための秘密の修飾子キーを持っているのは、ただ一人だけです。
秘密の修飾子を入力として受け取り、組み立てた口座番号をintとして返すassemble_account_number(int secret_modifier)関数を定義します。
正しい番号を求めるには、3つの一族それぞれのbank_number_partを合計します。
遺言書の指示は、まず青い断片をすべて足し、次に赤い断片をすべて足すというものです。 得られるコードは、2つの合計を掛け合わせることで求められます。
3つの一族の断片を1つのintegerに組み合わせて、得られるコードを返すassemble_code()関数を定義します。
この関数は入力を受け取らず、一族の該当する名前空間にある情報だけを使います。