اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

فراخوانی کتابخانه‌های استاندارد

+1 امتیاز
411 نمایش

چرا وقتی میشه با نوشتن

using namespace std;

به تمام کتابخانه‌های استاندارد دسترسی داشت، باز هم در ابتدای برنامه دستور

#include <...>

رو داریم؟

پرسیده شده چهارشنبه ۹ اسفند ۱۳۹۱ در C++ توسط CPP_Crawler4  
بازتگ شده جمعه ۳۰ فروردین ۱۳۹۲ توسط admin

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

این دو تا چیزه- در 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 استفاده کنیم به کامپایلر می‌گیم که در حال استفاده از یک فضای نام مشخص هستیم پس تعاریف داخل اون فضای نام رو هم در نظر بگیره مثل شکل دوم و سوم.
هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده پنجشنبه ۱۰ اسفند ۱۳۹۱ توسط prodo  
انتخاب شده پنجشنبه ۱۰ اسفند ۱۳۹۱ توسط CPP_Crawler4