این دو تا چیزه- در C++ ما کد خودمون رو به صورت شیگرا میتونیم بنویسیم و میتونیم از فضای نام برای اطمینان از یکی نبودن اسم کلاسهای خودمون با کلاسهای یه برنامهنویس دیگه استفاده کنیم. مثلاً
namespace EGMATH
{
namespace EGALGEBRA
{
class Group
{
public:
void createZn(int n);
};
Group::createZn(int n)
{
...
}
}
}
حالا میتونیم از کلاس به شکل زیر استفاده کنیم:
EGMATH::EGALGEBRA::Group G;
G.create Zn(5);
حالا فرض کنیم که کد کلاسها رو در قایل جداگانهی header.h نوشته باشیم. برای استفاده باید از یکی از شکلهای زیر استفاده کنیم:
شکل اول
include "header.h"
int main(int argc, char** argv)
{
EGMATH::EGALGEBRA::Group G;
G.createZn(5);
return 0;
}
شکل دوم
include "header.h"
using namespace EGMATH;
int main(int argc, char** argv)
{
EGALGEBRA::Group G;
G.createZn(5);
return 0;
}
شکل سوم
include "header.h"
using namespace EGMATH::EGALGEBRA;
int main(int argc, char** argv)
{
Group G;
G.createZn(5);
return 0;
}
ما میتونیم در یک فایل چندین فضای نام داشته باشیم. وقتی فایل رو include میکنیم فقط به کامپایلر اعلام میکنیم که میخواهیم از موارد داخل اون فایل استفاده کنیم. اما کامپایلر باید دقیقاً مسیر کلاس مورد نظر رو بدونه مثل شکل اول
EGMATH::EGALGEBRA::Group;
وقتی از using namespace استفاده کنیم به کامپایلر میگیم که در حال استفاده از یک فضای نام مشخص هستیم پس تعاریف داخل اون فضای نام رو هم در نظر بگیره مثل شکل دوم و سوم.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)