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

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

تفاوت ورودی و خروجی در زبان‌های برنامه‌نویسی C و C++

0 امتیاز
2,997 نمایش

ورودی و خروجی چه تفاوت‌های اصلی و پایه‌ای در C و C++ دارن؟ در C++ استفاده از ورودی خروجی به شکل C هست اما برعکسش وجود نداره. این تفاوت از کجا شکل می‌گیره؟

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده پنجشنبه ۹ آبان ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز

تفاوت ورودی و خروجی در C و C++ مثل بسیاری از تفاوت‌های دیگه‌ی این دو زبان برنامه‌نویسی برمی گرده به ساخت‌یافته بودن C و شی‌گرا بودن C++.
در C توابع ورودی و خروجی (مشخصاً scanf و printf) فاصله‌ی بسیار کمی با دستورات ورودی و خروجی ماشین داره و تقریباً بدون فاصله این توابع دستورات ورودی و خروجی ماشین رو فراخوانی می‌کنن.

int x = 0;
scanf("%d", &x);

این دستور مستقیماً جریان (stream) ها رو مورد دسترسی قرار می‌ده. یا به صورت مشابه

char c = 'a';
printf("sala%c", c);

در صورتی که با دستورات ماشین آشنایی داشته باشین متوجه می‌شین که شکل ورود و خروج مقادیر به جریان بسیار نزدیک به زبان ماشین هست.
در ورودی و خروجی استاندارد C++ این روند به صورت مستقیم وجود نداره. مثلاً

int x = 10;
cout<<x;

در این‌جا ما از شی (objetc) ای به نام cout استفاده می‌کنیم تا مقادیر رو به جریان خروجی بفرستیم. cout شی‌ای از کلاس ostream هست که وظیفه‌ش برقراری ارتباط با خروجی استاندارده. به صورت پیش‌فرض cout وظیفه‌ی برقراری ارتباط با مانیتور رو داره.
می‌تونین این طور در نظر بگیرین که کلاسی به نام ostream داریم که عملگری به نام << در اون پیاده‌سازی شده که یکی از سربارگذاری‌های این عملگر برای نوع داده‌ی int هست.

class ostream
{
  public:
  ...
  return_type operator<<(int x)
  {
    ...
  }
};
int main()
{
  int x = 10;
  ostream cout;
  cout<<x;
  return 0;
}

در این صورت یه سربارگذاری باید برای یک نوع داده‌ی دیگه هم انجام بشه. مثلاً برای char

class ostream
{
  public:
  ...
  return_type operator<<(char c)
  {
    ...
  }
};

ولی موضوع به این سادگی نیست. خود کلاس ostream یک کلاس مشتق شده از کلاس ios هست که ورودی و خروجی‌های استاندارد رو پیاده‌سازی می‌کنه. همه‌ی کلاس‌های ورودی و خروجی استاندارد از این کلاس مشتق می‌شن

class ostream : public ios ...

اما باز هم یک گام دیگه مونده. همه‌ی ورودی و خروجی‌ها که استاندارد نیستن. بنابراین یک کلاس عمومی‌تر ios_base هم وجود داره.

class ios : public ios_base ...

در حقیقت جریان به صورت دقیق جریان اصلی در این کلاس قرار می‌گیره و به کلاس‌های بعدی به ارث می‌رسه.
بنابراین با استفاده از روش شی‌گرایی یک مکانیزم برای ورودی و خروجی پیاده‌سازی شده که مزایا و معایب خودش را داره.
این اصل و ریشه‌ی تفاوت ورودی و خروجی C و C++
اما پاسخ به سوال دوم هم مشخص شد. به این دلیل استفاده از ورودی و خروجی C در C++ ممکنه که شی‌گرایی می‌تونه از شکل تابعی ساخت‌یافته بودن C استفاده کنه و برعکسش به این دلیل ممکن نیست که در C شی‌گرایی نداریم تا بتونه از ورودی و خروجی استاندارد C++ استفاده کنه.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده پنجشنبه ۹ آبان ۱۳۹۲ توسط prodo  

خیلی خوب بوذ ممنون