یک روش مهم برای سازماندهی کد، استفاده از «فضای نام» است.
ممکن است اسم دو تابع با هم تداخل داشته باشد، که این مشکل را میتوان با قرار دادن آنها در فضاهای نام متفاوت حل کرد.
فضاهای نام میتوانند تودرتو باشند، و این ممکن است به ساختاردهی پایگاههای کد بزرگ کمک کند.
دسترسی به فضاهای نام با عملگر تفکیک دامنهی :: انجام میشود.
مثال زیر استفاده از دو تابع متفاوت 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()};
شما در یک مؤسسهی حقوقی معتبر کار میکنید که در رسیدگی به درخواستهای منحصربهفرد وصیتنامه تخصص دارد.
در این تمرین میخواهید یک گاوصندوق اسرارآمیز را باز کنید. شما وصی این ترکه هستید و باید کدهای مخفی و دیرینهی سه خانواده را کنار هم بگذارید تا یک شماره حساب و کد متناظر با آن را به دست آورید.
برای اینکه هیچ خانوادهای نتواند گاوصندوق را بهتنهایی باز کند، باز کردن آن تنها با ترکیب دانش آنها با یک تغییردهندهی مخفی ممکن است که شما آن را از وصیتنامه میدانید.
سه کار پیش رو دارید که همهشان به باز کردن گاوصندوق توسط خانوادهها کمک میکنند.
یک «فضای نام» به نام estate_executor تعریف کنید.
کد مربوط به کارهای بعدی باید در بدنهی فضای نام estate_executor تعریف شود.
namespace some_name {
// The space between the curly brackets
// is called body of the namespace.
}
این لحظهی بزرگ شماست. تنها شما کلید تغییردهندهی مخفی را در اختیار دارید که شماره حساب مخفی را آشکار میکند.
تابع assemble_account_number(int secret_modifier) را تعریف کنید که تغییردهندهی مخفی را بهعنوان آرگومان میگیرد و شماره حساب سرهمشده را بهصورت یک int برمیگرداند.
برای رسیدن به عدد درست، باید bank_number_part هر سه خانواده را با هم جمع کنید.
دستورهای وصیتنامه از شما میخواهند که ابتدا همهی قطعههای آبی و سپس همهی قطعههای قرمز را جمع کنید. کد حاصل از ضرب این دو مجموع به دست میآید.
تابع assemble_code() را تعریف کنید که با ترکیب قطعههای سه خانواده در یک integer، کد حاصل را برمیگرداند.
این تابع هیچ آرگومانی ندارد و تنها به اطلاعات موجود در فضای نامهای مربوط به خانوادهها تکیه میکند.